-
[백준 2659] 십자카드 문제C 프로그래밍/BOJ 2022. 8. 19. 00:12728x90
https://www.acmicpc.net/problem/2659
#include <stdio.h> int num[4]; int div[4]; void input(void) { for (int i = 0; i < 4; i++) { scanf("%d", &num[i]); } } int get_clock(int a[]) //입력받은 배열을 시계방향으로 돌면서 시계수를 구한다 { int min = 10000; for (int i = 0; i < 4; i++) { int tmp = a[i % 4] * 1000 + a[(i + 1) % 4] * 100 + a[(i + 2) % 4] * 10 + a[(i + 3) % 4]; if (min > tmp) min = tmp; } return min; } int to_array(int n) //숫자를 배열로 변환하는 함수 //시계수인지를 판단하기 위해 { for (int i = 3; i >= 0; i--) { div[i] = n % 10; n /= 10; } } int min_clock(int ans) //ans가 몇 번째 시계수인지 탐색하는 함수 { int cnt = 0; for (int i = 1111; i < ans; i++) { to_array(i); if (get_clock(div) == i) cnt++; } return cnt; } int main(void) { input(); int ans = get_clock(num); printf("%d", min_clock(ans) + 1); return 0; }
아... 이문제 다시 풀어도 아이디어 내기 어려웠다.
//get_clock 함수
입력받은 배열을 시계방향으로 '돌면서(%4를 해준 이유)' 시계수를 구하는 함수이다.처음에 입력받은 input 뿐 만 아니라, 나중에 min_clock 함수에서 해당 숫자가 시계수인지 아닌지 판별할 때 쓰려고 파라미터를 배열로 받았다. (정확히는 배열의 주소이지만 편의상 이렇게 부르겠음)
//to_array 함수
숫자를 배열로 변경하기 위한 함수이다.
//min_clock 함수
가장 작은 시계수인 1111부터 따졌을 때, ans(입력받은 배열로 구할 수 있는 시계수)가 몇 번째 수 인지 탐색하는 함수이다. 이때 루프를 도는 변수인 i는 숫자이기 때문에 이를 배열로 변경하고자 to_array 함수를 사용하였고, 해당 숫자가 시계수인지 판별하기 위해 get_clock 함수를 사용하였다.
728x90'C 프로그래밍 > BOJ' 카테고리의 다른 글
[백준 2670] 연속부분최대곱 (0) 2022.08.20 [백준 2578] 빙고 (0) 2022.08.20 [백준 2630] 색종이 만들기 (0) 2022.08.18 [정올 1057] 미친 수열 (0) 2022.08.18 [사설] 3이 없는 나라 (0) 2022.08.18