문제출처 : 알고스팟
푸는방식 :
이 문제는 완전 탐색을 이용해서 각 스위치를 최소로 눌러서 모든 시계를 12시로 맞출 수 있는지 확인하는 식으로 풀 수 있다.
즉 모든 스위치를 1번씩 늘려 눌러가며 모든 시계가 12시가 되는 최소값을 출력하면 되는 것이다. 이때 스위치는 4번을 누르게되면 12시간이 돌아가 다시 원 상태로 돌아오는 것을 유의하여 풀 수 있습니다.
각 스위치가 어떤 시계와 연결이 되어있는지를 위와 같이 x와 .을 이용한 char형 배열을 통해 저장을 하게됩니다.
areAligned()는 모든 시계가 12시를 가리키고 있는지 검사하여 그 참/거짓 값을 반환합니다.
push()는 해당하는 스위치를 누르게됩니다. (해당하는 시계는 3시간 증가)
solve()는 재귀 함수로 사용되어 문제를 해결합니다. 0번 부터 9번까지 총 10개의 스위치를 눌러가며 계산하며, 처음에는 모두 0번을 누른 상태부터 시작하여 전부 3번씩 누른 상태까지 확인하여 만족하는 가장 작은 값을 반환하게됩니다.
이 때 같은 루프에서 4번을 스위치 눌르기를 진행하므로 시계는 다시 원 상태로 되돌아오기 때문에 다음 재귀호출에서 신경쓰지 않아도 됩니다. (초기화 문제)
메인에서는 솔브함수를 이용하여 각 테스트 케이스 마다 옳바른 값을 출력하고 만약 불가능 하다면 -1을 출력합니다.
푸는방식 :
이 문제는 완전 탐색을 이용해서 각 스위치를 최소로 눌러서 모든 시계를 12시로 맞출 수 있는지 확인하는 식으로 풀 수 있다.
즉 모든 스위치를 1번씩 늘려 눌러가며 모든 시계가 12시가 되는 최소값을 출력하면 되는 것이다. 이때 스위치는 4번을 누르게되면 12시간이 돌아가 다시 원 상태로 돌아오는 것을 유의하여 풀 수 있습니다.
각 스위치가 어떤 시계와 연결이 되어있는지를 위와 같이 x와 .을 이용한 char형 배열을 통해 저장을 하게됩니다.
areAligned()는 모든 시계가 12시를 가리키고 있는지 검사하여 그 참/거짓 값을 반환합니다.
push()는 해당하는 스위치를 누르게됩니다. (해당하는 시계는 3시간 증가)
solve()는 재귀 함수로 사용되어 문제를 해결합니다. 0번 부터 9번까지 총 10개의 스위치를 눌러가며 계산하며, 처음에는 모두 0번을 누른 상태부터 시작하여 전부 3번씩 누른 상태까지 확인하여 만족하는 가장 작은 값을 반환하게됩니다.
이 때 같은 루프에서 4번을 스위치 눌르기를 진행하므로 시계는 다시 원 상태로 되돌아오기 때문에 다음 재귀호출에서 신경쓰지 않아도 됩니다. (초기화 문제)
메인에서는 솔브함수를 이용하여 각 테스트 케이스 마다 옳바른 값을 출력하고 만약 불가능 하다면 -1을 출력합니다.
[완전탐색] 시계 맞추기 (CLOCKSYNC)
Reviewed by Lifer
on
9/27/2018
Rating:
댓글 없음: