Computer Sciences/Problem Solve(155)
-
[Baekjoon] 1620번: 나는야 포켓몬 마스터 이다솜
https://www.acmicpc.net/problem/1620 문제 설명 문제가 엄청나게 길지만 요약하면 다솜이가 사용할 포켓몬 도감을 만들어줘야 한다. N개만큼 포켓몬 이름이 입력되며 순서가 있고 순서대로 저장된다. 그 다음 입력되는 질문 M개에 대해서 대답해야 한다. 숫자로 들어오는 경우 해당 번호에 해당되는 포켓몬 이름이 출력되고 포켓몬 이름이 들어오면 해당 번호가 출력돼야 한다. 풀이 방법 2개의 HashMap을 이용해 해결했다. 한 개는 번호를 키로 사용하고 값을 포켓몬 이름을 저장하고, 다른 하나는 키로 포켓몬 이름을 사용하고 값으로 번호를 저장한다. 그 다음엔 질문이 숫자인지 포켓몬 이름인지 판별해야 하는데 이 방법으론 두 가지가 있다. matches()를 활용한 정규식 첫 글자만 가져와..
2023.03.07 -
[Baekjoon] 16236번: 아기 상어 - Java
https://www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가 www.acmicpc.net 문제 설명 BFS를 활용한 구현 문제이다. 조건이 많아 문제를 잘 이해해야 한다. 문제에서 주어진 물고기를 먹는 조건은 다음과 같다. 아기 상어는 자신보다 큰 물고기는 먹을 수 없으며 공간 또한 지나갈 수 없다. 자신과 같은 크기의 물고기는 먹을 순 없지만 지나갈 수 있다. 자신보다 작은 물고기는 먹을 수 있다. 아기 상어의 이동 조건은 다음과 같다. 더 이상 먹을 수 있는 물고기가 없다면..
2023.03.06 -
[Baekjoon] 14425번: 문자열 집합 - Java
https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 문제 설명 N개의 문자열 집합 S가 주어진다. 그 다음 M개의 문자열이 입력되는데 이 중 집합 S에 포함된 문자열의 개수를 출력하면 된다. 풀이 방법 이렇게 중복체크하는 문제는 Set 자료구조를 활용하면 쉽게 해결할 수 있다. Set의 특징은 요소의 순서가 없으며 중복이 없다. 자바에서 제공하는 Set 중 가장 많이 사용되는 HashSet은 요소 접근에 대해 O(1..
2023.03.04 -
[Baekjoon] 16953번: A -> B - Java
https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다. www.acmicpc.net 문제 설명 정수 A와 B가 주어진다. 그리고 A를 B로 만들려고 하는데 가능한 연산 규칙은 다음 두 가지다. 2를 곱한다. 1을 수의 가장 오른쪽에 추가한다. A를 B로 바꾸는데 필요한 연산의 최솟값을 구하면 된다. 풀이 방법 A를 B로 만드는 것보다 B를 A로 만드는 게 더 편할 것 같다는 생각으로 반복문을 통해 해결했다. 예전이 이와 비슷한 방법으로 해결했던 문제가 있었다. https://somuchthings.tistory.com/181 (지금보니 이 문제 이름도 'A와 B' 였다 ㅎㅎ) 위 규칙에 따르면 1의 자리..
2023.03.03 -
[Baekjoon] 1388번: 바닥 장식 - Java
https://www.acmicpc.net/problem/1388 1388번: 바닥 장식 형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나 www.acmicpc.net 문제 설명 바닥 장식을 위한 타일 개수를 카운팅하는 문제이다. 단, -- 과 같이 이어져 있다면 하나의 타일로 간주한다. 풀이 방법 DFS를 활용하여 문제를 해결했다. 이어져 있는 타일의 끝까지 간 후에 카운팅하면 되기 때문이다. 고려해야 할 점은 바닥면의 끝부분에 닿은 상황이다. 이 경우에는 타일을 더 놓을 수 없으므로 해당 칸에서 DFS를 종료시킨다. private static void dfs(int..
2023.03.02 -
[Baekjoon] 10815번: 숫자 카드 - Java
https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 문제 설명 상근이가 가지고 있는 카드 더미와 비교 카드 더미를 받아서 상근이가 가지고 있는 카드들을 체크하는 문제이다. 풀이 방법: Set, List - 통과 비교 카드 더미 중 상근이의 카드 더미만 확인하면 되므로 상근이의 카드는 Set으로 저장한다. HashSet의 contains()의 사간 복잡도는 O(1)이므로 매우 빠르다. Set sangeunCards = ..
2023.03.01