본문 바로가기

백준

[백준][JAVA] 9375 - 패션왕 신해빈 문제 출처 : https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 문제 설명 각 의상 종류에 대해 의상 갯수를 따로 저장해야 하기 때문에, 해시맵으로 푸는 것이 가장 간단하게 풀리는 방법입니다. 입력값에서 의상의 종류를 key로, 각 종류에 대한 의상 갯수를 value로 저장한 다음, 각 value들을 모두 곱해주면 됩니다. 여기서 주의할 점은 해빈이가 알.. 더보기
[백준][BOJ] 2606 : 바이러스 문제 출처 : https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net 설명 읽어보면 유형이 쉽게 보이는 문제에 속합니다. 1번 컴퓨터에 인접한 노드부터 시작해서 연결된 리프노드까지 순회하면서 그 수를 세는 문제이기 때문에, 인접행렬을 통해 그래프 정보를 입력받은 후 DFS구현을 통해 문제를 해결했습니다! 코드 import java.util.Scanner; public class BOJ2606_Virus { static int[][] computers; st.. 더보기
[백준][JAVA] 15900 : 나무 탈출 문제 출처 : https://www.acmicpc.net/problem/15900 15900번: 나무 탈출 평소에 사이가 좋지 않던 성원이와 형석이가 드디어 제대로 한 판 붙으려고 한다. 성원이와 형석이 둘과 모두 똑같이 친한 인섭이가 대결 종목을 정해 가져왔다. 바로 '나무 탈출' 이라는 보드게 www.acmicpc.net 문제 설명 이 문제는 각 케이스에 대한 공통된 규칙을 찾아야 풀 수 있는 문제입니다. 여러 경우를 손으로 직접 그려가며 찾아보면, "각 리프노드부터 루트노드까지의 깊이의 합이 짝수이면 지고, 홀수이면 이긴다"는 규칙이 있습니다. 그 규칙을 바탕으로 인접리스트로 그래프 정보를 입력받은 다음 DFS를 구성해서 문제를 풀었습니다. 코드 import java.io.BufferedReader.. 더보기
[백준][JAVA] 1260 : DFS와 BFS 문제 출처 : https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 설명 DFS와 BFS를 배운 직후에, 제대로 코드를 익혔는지 확인용으로 풀어봤습니다. 인접 행렬에 입력값들을 차례대로 넣은 다음에(양방향 그래프임에 주의해야 합니다!) 차례대로 DFS와 BFS를 구현해 줬습니다. 코드 import java.io.BufferedReader; import java.io.InputStreamReader; impo.. 더보기
[BOJ][JAVA] 11866 - 요세푸스 문제 0 문제 출처 : https://www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제 설명 자료구조 Queue(FIFO)를 사용하는 문제였습니다. 물론 문제를 읽고 바로 큐를 떠올리기는 쉽지 않습니다만, "원(Circle)형 문제"이기 때문에 K번째 사람 전까지의 사람들을 dequeue & enqueue하면 K번째 사람을 제거하고 나서도 원에서의 순서가 그대로 유지되기 때문에 큐를 사용하면 간단하게 문제가 해결됩니다. 코드 import java.util.LinkedList; import java.util.Queue; import java.util.. 더보기
[BOJ][JAVA] 10773 - 제로 문제 출처 : https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 문제 설명 풀이 방법으로 스택(FILO)을 쉽게 떠올릴 수 있는 문제입니다. 입력이 0일 때마다 스택을 pop하고, 그렇지 않으면 그 수를 스택에 넣습니다. 입력이 끝나면, 스택이 빌 때까지 pop하면서 pop한 수를 결과에 누적시켜 더하면 되는, 비교적 간단한 문제였습니다. 코드 import java.util.Scanner; import java... 더보기
[BOJ][JAVA] 7568 - 덩치 문제 출처 : https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 문제 설명 그렇게 어렵지 않은 문제인데, 너무 어렵게 생각해서 초반에 좀 헤멨던 문제입니다. 저처럼 복잡하게 잘못 생각하지 않으려면, 다음과 같이 생각하시면 됩니다. 각 사람의 덩치 등수는 자신보다 "더 큰 덩치", 즉 키와 몸무게가 확실히 자기보다 더 큰 사람의 수로 정해집니다. 따라서, 덩치 등수 정하기 애매한 것은 생각하지 않고, 그냥 자기보다 확실히 더 큰 사람이.. 더보기
[BOJ][JAVA] 1181 - 단어 정렬 문제 출처 : https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 문제 설명 Comparator와 contains함수를 잘 활용해서 풀어야 하는 문제입니다. 인터넷의 다른 포스팅들도 대부분 풀이가 같은 걸로 보아, 이 풀이로 거의 정형화된 문제인 것 같습니다. compare(o1, o2)와 o1.compareTo(o2)는 공통적으로 o1에서 o2를 빼는데, 오버라이딩을 통해 연산의 대상을 변경할 수 있습니다. 그리고 이 두 함수는 연산의.. 더보기