시작하기, 뭐든

코딩테스트 - 완전탐색 모의고사 : 반복되는 숫자들의 규칙을 찾아야 한다! 본문

코딩테스트

코딩테스트 - 완전탐색 모의고사 : 반복되는 숫자들의 규칙을 찾아야 한다!

Gascon 2022. 1. 18. 22:12

시작하기, 뭐든 - 기록 31일차

 

오늘의 코딩테스트 문제는 완전탐색 문제!

처음 이 문제를 보고 읭??? 1,2,3번의 답을 파라미터값으로 주는게 아니라,,, 모의고사 답만 주네...??에서 1차 멘붕이 왔다ㅎㅎ

(당연히 이 문제는 1,2,3번 답에서 규칙성을 찾는 문제니 당연한 거였는데..)

 

그래서 피곤하고 자고 싶은 머리를 굴려서...자..찍..찍는 방식 숫자들의 ... 규칙성을 찾아보자.. 했다.

1번은 5로 나누면 나머지 값이 1,2,3,4,5로 계속 반복되는 규칙을 찾았다.

 

근데 2번부터는 이제 멘탈이 나간거다. 왜?? 나머지 2, 3번은 답을 나눠도 나머지값으로 규칙성을 찾을 수 없었다.

 

(시작을 매우 잘못했지, 아니 내가 잘못했지 뭐..)

1번 규칙을 찾을 때 값이 아니라 index로 생각을 바꿔봤으면 참~~ 좋았을텐데..

일단! 규칙을 살펴보자.

 

[1번 아이 찍기 규칙]

1번 아이는 5개씩 끊어가면서 동일한 패턴으로 문제를 찍고 있다.

6번째부터 다시 동일한 5개의 숫자 패턴을 가지고 있다.

index 기준으로는 5로나눈 나머지 값과 동일한 index들은 모두 같은 값을 가지고 있다는 뜻이다.

 

5로 나눴을 때 나머지 값이 0은 index를 보면 값이 1로 똑같은걸 확인할 수 있다.

다른 나머지 값들도 보면 모두 값이 같다.

 

나머지 2번, 3번을 보자.

 

2번, 3번도 반복되는 숫자 패턴의 개수 차이만 있을뿐, 묶음 단위??로 숫자가 반복되고 있음을 알 수 있다.

이 때도 2번은 8로, 3번은 10으로 나눴을 때의 나머지 값이 같은 index들은 같은 값을 가지고 있다.

즉, answer 값을 구하려고 굳이 for문을 돌리지 않고도 반복되는 묶음을 찾고 그 안에 들어있는 개수만 알면 아래처럼 규칙으로 풀어낼 수 있다! 

int[] one = {1,2,3,4,5}; //5
int[] two = {2, 1, 2, 3, 2, 4, 2, 5};//8
int[] three = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5};//10

for(int i=0; i<answers.length; i++) {
	if(answers[i]==one[i%one.length]) one_answer ++;
	if(answers[i]==two[i%two.length]) two_answer ++;
	if(answers[i]==three[i%three.length]) three_answer ++;
}

이걸 찾아서 풀어내야 하는 문제였는데..

삽질만 열심히 하다가 오늘도 공부로 넘어가게 되었..

 

그래도, 어제보단 성장했으리라 위안을 삼으며

오늘도 끝!

 

Comments