먹었으면 뇌를 쓰자

백준 3052 java - 나머지 (풀이 추가: for-each문/HashSet) 본문

JAVA/백준 알고리즘

백준 3052 java - 나머지 (풀이 추가: for-each문/HashSet)

뇌이비 2022. 11. 24. 22:25

문제

 

 

 

 

 

잘못된 코드

이번 로직은 꽤 잘 짰다고 생각했는데...

바로 틀렸습니다!!!

 

 

 

 

 

정답

일단 종전에 for문을 2개 쓰던 걸 1개로 압축했다. 

 

내가 잘못 쓴 코드는...

기본적으로 배열의 첫 번째 값을 서로 다른 값에 포함시키기 위해

num에 1개를 넣어놓고, 

첫 번째 값과의 비교부터 출발, 총 9번의 비교를 반복하도록 했다.

최종적으로 rest[8]과 rest[9]까지 비교해서, 다를 때마다 num을 1씩 증가시켰다.

 

int num =1;
	for(int k=0;k<9;k++) {
			if(rest[k+1]!=rest[k]) {
				num++;
			}
		}

 

 

여기서 문제는, 같을 때마다 어떻게 해야할지 적지 않았다는 점이다.

그러니까 for문이 나머지가 같은 경우를 만나게 되면 동작할 수가 없게 된다.

 

정답 코드는 아래와 같다.

 

 

 

 

풀이 추가(1- boolean 배열, for-each문 사용 / 2- HashSet 사용)

 

한 달 정도 지나서 다시 푸는데 오히려 위의 풀이가 이해가 안간다...

두 가지 방법으로 풀어보았다.

 

1) boolean 배열에 나머지 값을 넣고, for-each문으로 true 개수를 카운트해서 구한다. 

이쪽이 훨씬 간단하고 이해하기 쉽다. 

 

 

 

2) 중복을 허용하지 않고, 인덱스가 없는 HashSet을 사용한다

 

 

Comments