Coding Test
-
[2239] 스도쿠Coding Test 2025. 7. 3. 01:03
이 문제는 처음봤을 때 복잡해 보였지만 풀어보니 빈칸에 들어올 수 있는 숫자를 구하는 부분과 DFS 함수만 구현하면 쉽게 풀 수 있는 문제인 것을 느꼈다. 먼저 빈칸에 들어갈 수 있는 수를 확인하는 함수이다. 칸 index와 확인하고자 하는 숫자를 받아서 해당 칸의 가로세로로 동일한 숫자가 있는지 먼저 계산한다. 처음에는 가로 세로니까 이중 for문으로 구현했는데 단일 for문으로도 구현이 가능했다.가로 세로 모두 0부터 8 index의 값을 확인해야 하기 때문이다. 이후에는 사각형안에 있는 숫자들을 확인한다. 이때 x, y 값을 3으로 나누고 3을 곱해야 해당 인덱스가 속한 사각형의 우측 상단 인덱스를 얻을 수 있다. 다음은 DFS 함수이다. 나는 맨 처음에 DFS 함수가 다 끝나면 main 함수에..
-
[15927] 회문은 회문아니야!Coding Test 2025. 7. 1. 21:14
이 문제를 처음봤을 때 가능한 모든 부분문자열을 구해서 팰린드롬 여부를 확인해야되는 것처럼 보이지만 의외로 간단하게 해결할 수 있다.어떤 문자열을 입력받아도 단 3 개의 case로 분류할 수 있기 때문이다. 1. 모든 같은 문자인 문자열2. 팰린드롬인 문자열3. 팰린드롬이 아닌 문자열 첫번째의 경우에는 -1을 출력해주면된다. 두번째의 경우는 문자열 길이 -1 을 출력하면 된다. 마지막 세번째는 문자열 길이를 출력하면 된다. C++의 경우 std::reverse()함수를 통해 문자열을 쉽게 뒤집을 수 있다. 나는 팰린드롬 문자열일 경우 시간 단축을 위해서 문자열 길이의 절반 만큼의 반복문으로 모든 문자가 같은지 확인했다.(팰린드롬의 특성 상 앞 절반과 뒷 절반의 문자는 동일하기 때문이다) 하지만 이렇게만 ..
-
[1747] 소수 & 팰린드롬Coding Test 2025. 7. 1. 02:04
이 문제는 소수를 구하는 부분과 구한 소수들에서 팰린드롬을 만족하는 수를 찾는것이다. 나는 먼저 소수를 표시할 배열을 정의하여 아리스토테네스의 채의 방식으로 소수들을 구하고 소수일 경우 배열의 값을 1로 표시했다.소수가 아니면 -1, 소수 연산을 하지 않은 수는 0으로 표시했다. 그리고 소수 배열에서 팰린드롬을 구하는 반복문을 수행했다.나는 팰린드롬을 쉽게 구하기 위해서 string에 숫자를 저장하고 std::reverse() 함수를 사용하여 숫자를 반전시켰다.이렇게 해서 복잡한 연산을 하지 않더라도 팰린드롬 여부를 확인할 수 있다. 반복문에서 처음으로 answer값을 확인하는데 팰린드롬을 구했으면 이후의 반복문을 건너뛰기 위해서이다. 이 코드에 논리오류는 없었는데 문제를 제대로 확인하지 않고 소수값 ..
-
[1233] 주사위Coding Test 2025. 6. 30. 21:00
이 문제는 각 주사위마다 면개수만큼 반복문을 돌려 나올 수 있는 총 합을 구하고 그 중에서 가장 많이 나온 합을 출력하면 된다. 그래서 입력이 3개 이므로 3중 반복문이 필요하고 총 합의 최댓값이 80이므로 길이가 81인 배열을 정의해서 세 주사위 합의 인덱스를 1씩 올려서 가장 큰 숫자가 있는 인덱스를 출력하면 된다. 처음 반복문은 주사위의 변을 저장하고 다음에 3중 반복문으로 주사위의 합을 구한다. 3중 반복문에서 각 반복분의 횟수는 각 주사위의 면의 갯수만큼 한다. 이 때 주의해야할 점이 반복문의 시작값이 1이여야 하고(주사위에서 나올 수 있는 최솟값은 0이 아니라 1이다), 최댓값은 주사위 면의 갯수여야 한다(최댓값보다 작은 경우로 할 경우 주사위로 나올 수 있는 최댓값은 포함을 하지 않게 된다..
-
[25558] 네비게이션Coding Test 2025. 6. 29. 00:48
이 문제는 입력받은 각 좌표간의 거리를 계산해서 가장 짧은 거리의 좌표값을 입력한 번호를 찾으면 되는 문제다. #include #include #include #include int main() { int n = 0; long start_x; long start_y; long end_x; long end_y; std::cin >> n; std::vector results; std::cin >> start_x >> start_y >> end_x >> end_y; for(int i=0; i int m = 0; long prev_x = start_x; long prev_y = start_y; long total_..
-
[2501] 약수 구하기Coding Test 2025. 6. 28. 22:21
이 문제는 두개의 수(첫 번째는 약수를 구할 수, 두 번째는 출력할 약수)를 받아서 첫번째 값으로 반복문을 돌면 되는 문제이다. #include #include int main(int argc, const char * argv[]) { int a = 0; int b = 0; std::vector results {}; results.push_back(0); std::cin >> a >> b; for(int i = 1; i if (a % i == 0) { results.push_back(i); } } results.push_back(a); if(results.size() std::cout } ..