코딩테스트
-
Q. 25758 자바 : 유전자 조합코딩테스트/백준_Java 2023. 8. 16. 23:27
문제 : 유전자 조합 실버 1 난이도의 문제이다. 유전자가 주어지고 이를 조합한다. 두 유전자를 조합하면 첫 번째 유전자의 첫 번째 형질(글자)와 두 번째 유전자의 두 번재 형질(글자)가 붙는다 주의해야 할 점은 들어오는 입력값은 최대 10만개이지만 실제로 유효한 값은 AA - ZZ, 중복 최대 1개 => 26 * 26 * 2 = 1352개이므로 중복 처리가 필요하다. 아래와 같은 방식으로 풀었다. 1. 유전자들을 Set에 저장하되, 중복을 한 번은 허용해야 하므로 만약 중복된 값이 들어온다면 중복 값들을 저장한 Set에 추가한다. (두 번 까지만 고려하면 된다) 2. 유전자들을 문제 조건에 따라 섞는다. 이 때 중복해서 들어온 유전자를 따로 처리하면 시간을 좀 더 줄일 수 있다 3. 문제 조건에 따라 ..
-
Q. 6808. 규영이와 인영이의 카드게임(D3)코딩테스트/SWEA_Java 2023. 5. 19. 18:42
Q. 6808. 규영이와 인영이의 카드게임(D3) 0. 문제 D3 난이도의 문제이고, DFS와 조합을 이용한 문제라고 생각된다. 카드 뽑기 게임을 한다. 카드는 1-18까지 한 장만 있고 규영이와 인영이가 9장씩 뽑는다. 카드 게임은 두 명이 서로 한 장씩 카드를 내서 카드가 높은 사람이 두 카드의 합 만큼 점수를 가져가는 방식이고, 9번의 게임을 해서 점수가 높은 사람이 전체 게임을 이기게 된다. 규영이의 카드가 모두 주어진다면 두 명의 승패의 경우의 수를 구하는 문제이다. 1. 풀이 개인적으로 삽질을 많이 한 문제이다.. 좀 오래 고민하다보니 쉽게 풀려 슬펐다. 아래와 같은 방식으로 풀었다. 0) 먼저 규영이의 카드를 배열과 해시셋에 저장하고, 해시셋을 이용해 인영이의 카드를 찾는다. 1) 그리고 깊..
-
Q. 13428. 숫자 조작(D3)코딩테스트/SWEA_Java 2023. 5. 18. 23:40
Q. 13428. 숫자 조작(D3) 0. 문제 D3 난이도의 문제이고, 조합을 이용한 구현 문제라고 생각된다. 9자리 이하의 음이 아닌 정수 N이 주어지고, 두 숫자의 위치를 바꿀 수 있다면 최대값과 최소값을 출력하는 문제이다. 주의해야 할 점은 시작하는 수가 0이 되서는 안된다는 점 이다 1. 풀이 그냥 조합을 이용해서 풀면 되는 문제인데 어렵게 돌아가려다 삽질을 많이 했다. 먼저 삽질하고 틀린 풀이는 아래와 같다. 1) 최대값, 최소값을 재귀적으로 찾는다 2) 만약 현재 위치의 현재 값이 최소or최대값인 경우 다음 인덱스를 변수로 다시 위 함수를 호출한다. 틀린 풀이이다. import java.io.BufferedReader; import java.io.FileInputStream; import ja..
-
Q. 5642. 합(D3)코딩테스트/SWEA_Java 2023. 5. 17. 12:22
Q. 5642. 합(D3) 0. 문제 D3 난이도의 문제이고, DP를 이용한 문제이다. 수열이 주어지고 연속해서 원소를 골라 합을 구할 때, 그 합의 최대가 몇인지 구하는 프로그램을 작성하는 문제이다 1. 풀이 두 가지의 풀이 방법이 생각났다. 첫번재는 DP를 이용한 풀이이고, 두 번째는 투 포인터를 이용한 풀이이다. 1-1 DP를 이용한 풀이 DP인 경우 보통 정답이 dp[N - 1]인데, 이 문제의 경우는 그렇게는 정답을 구할 수 없어서 조금 시간이 걸렸다. 아래와 같은 방식으로 풀었다. 1) 반복문을 N-1까지 돌면서, 현재 인덱스의 숫자와 이전에 저장된dp + 현재 인덱스의 숫자를 비교해 큰 값을 dp에 저장한다. 2) dp 배열에 저장된 값 중 최대값을 저장한다. 코드는 아래와 같다. impor..
-
Q. 3750. Digit sum(D3)코딩테스트/SWEA_Java 2023. 5. 15. 21:43
Q. 3750. Digit sum(D3) 0. 문제 D3 난이도의 문제이고, 구현 문제라고 생각된다. 수 n이 주어지고, n의 각 자리수를 더한다. 다시 그 값이 n이 되고, n이 한 자리가 될 때 까지 이를 반복한다. 주의해야 할 점은 입력값의 범위가 최대 10^18이라는 점 이다. 1. 풀이 1) 처음 입력이 int 범위를 넘어설 가능성이 있으므로 char 배열로 입력을 받았다. 2) 이후에 입력값의 길이를 검사해서 만약 한 자리의 입력일 경우 그냥 이를 출력하고, 한 자리 이상인 경우 모든 자리의 수를 더한 값을 int로 저장했다.3) 위에서 int로 저장한 값이 한 자리 이하일 때 까지 이를 반복했다. 풀이 코드는 아래와 같다 import java.io.BufferedReader; import j..
-
Q. 1226. 미로 1(D4)코딩테스트/SWEA_Java 2023. 5. 14. 23:27
Q. 1226. 미로 1(D4) 0. 문제 D4 난이도의 문제이지만, 그정도는 아닌 것 같고 단순 그래프 탐색 문제이다. 이동할 수 있는 칸, 이동할 수 없는 칸, 시작 위치, 종료 위치가 주어졌을 때 이동할 수 있는지 계산하는 문제이다. 1. 풀이 전형적인 그래프 탐색 문제이다. BFS를 이용해 풀이했고, 아래와 같은 방식으로 풀었다.자료형은 갈수 없는 벽과 갈 수 있는벽으로 나눠지므로 boolean 타입을 사용했다. 1. 입력을 받으면서 갈 수 있는 벽인지 여부를 저장한다. 또한 시작 위치와 종료 위치도 저장한다.2. 종료 위치에서부터 BFS 탐색을 시작하며, 이전에 방문했던 곳은 표시를 해서 재방문하지 않도록 한다.3. 만약 시작 위치에 도달했을 경우 즉시 루프를 종료하고, 결과를 저장한다. imp..
-
Q. 6190. 정곤이의 단조 증가하는 수(D3)코딩테스트/SWEA_Java 2023. 5. 13. 23:11
Q. 6190. 정곤이의 단조 증가하는 수(D3) 0. 문제 D3 난이도의 문제이고, 구현 문제라고 생각된다. 단조 증가하는 수는 각 숫자의 자릿수가 단순하게 증가하는 수를 말한다. 예를 들어 111566, 233359는 단조 증가하는 수이고, 12343, 999888은 단조 증가하는 수가 아니다. 수열이 주어졌을 때 두 원소의 곱이 단조 증가하는 수인지 판단해서그중에 최대값을 출력하는 문제이다. 1. 풀이 1. 두 수를 곱한 뒤에 그 수가 단조 증가하는 수인지 판단한다. 2. 만약 단조 증가하는 수인 경우 최대값을 갱신한다 import java.util.Arrays; import java.util.StringTokenizer; import java.io.BufferedReader; import java..
-
Q. 4615. 재미있는 오셀로 게임(D3)코딩테스트/SWEA_Java 2023. 5. 12. 13:38
Q. 4615. 재미있는 오셀로 게임(D3) 0. 문제 D3 난이도의 문제이고, 어려운 구현 문제라고 생각된다. 오셀로 게임에 대한 문제이다.처음에 전체 판의 크기가 주어지고, 중앙에 돌 4개는 기본으로 놓여져 있다.이후에 놓는 돌의 색깔과 좌표가 주어지고, 돌을 놓을 때 마다 오셀로의 규칙에 맞춰서 돌의 색깔이 계속 바뀔 때,마지막에 흰색/검정색 돌의 개수를 출력하는 문제이다. 1. 풀이 다 풀고나서 자꾸 틀리길래 좀 찾아보다 보니.. 좋은 팁을 발견했다. 바둑돌의 색깔이 1 또는 2로 주어지는데, 그렇다면 3에서 내 색깔을 빼면 상대편의 색깔이 나오게 된다. 이를 이용해서 다행히도 맞추게 되었고 아래와 같은 방식으로 풀었다. 좀 복잡해서 함수별로 기능을 최대한 분리해서 풀려고 노력했다. 0) dy, ..