youngik

완전탐색 (모의고사) 본문

programmers

완전탐색 (모의고사)

youngik 2021. 4. 7. 20:56

문제를 읽어봤을 때 정말 현실에서도 저렇게 문제를 찍는 사람들이 있을텐데, 그 생각을

알고리즘으로써 풀어보는게 재밌는 것 같다!

 

위 문제도 분석을 해보았을 때, 

 

1. 먼저 1번, 2번, 3번 수포자가 찍는 패턴이 있음

(*1번 : 1~5번 반복 / 2번 : 2,1,2,2,2,3,2,4 반복 / 3번 : 3,3,1,1,2,2,4,4,5,5)

2. answers의 배열과 비교를 해서 각각의 수포자 패턴의 정답과 일치하면 count 증가

3. answers의 배열이 더 긴 경우에는, 다시 첫번째 배열로 가서 로테이션으로 비교

4. 가장 높은 점수를 받는 사람이 여러명일수도 있음. (오름차순 정렬)

 

쉬운 문제처럼 보였지만,, 번거로운 작업들이 많았던 것 같다. 

1) 수포자 배열 끝까지 검색을 하면 다시 첫번째로 돌아가는부분. (%부분 이용하기)

(처음에 rotate 시작을 1로하고, 배열에 접근할 때에는 rotate-1로 접근 한뒤에, 배열길이보다 클 때, 배열 길이만큼

%연산을 통해서 다시 1로 돌아가게 만들었다.)

 

2) 가장 높은 점수를 받는 사람이 여러명일 때, 배열의 형태로 오름차순으로 만들어야 함.

(길이가 고정적이지 않고, 가변적이라,, queue에 넣어서 다시 배열로 만들려고 생각도 했는데,, 그게 더 번거로워 보여서

max값을 구하고, max 값을 가진 수만큼 int형 배열을 만들어서 위치값을 넣었다.)

 

위 코드를 더욱 단순하게 할 수 있는 방법도 있을 것 같은데,, 일단은 생각이 안나서 저렇게 구현을 했다.

max 부분도 오름차순으로 위치값을 불러오기 때문에 쉽게 보기 위해서 for문을 돌면서 max값을 찾았다.

(for문이 3번정도밖에 안돌기 때문에 괜찮다 생각함,,)

 

생각보다 머릿속으로는 이해가 됐는데 코드로 구현하는 부분은 아직도 좀 미숙한 것 같다.

그래도 시간이 남아있으니 남아있는 문제를 풀어보면서 더욱 실력을 쌓아가야겠다.

'programmers' 카테고리의 다른 글

해시 (완주하지 못한 선수)  (0) 2021.04.09
해시 (전화번호 목록)  (0) 2021.04.09
스택/큐 (프린터)  (0) 2021.04.07
정렬 (H-index)  (0) 2021.04.07
스택/큐 (기능개발)  (0) 2021.04.07
Comments