먹었으면 뇌를 쓰자
백준 3052 java - 나머지 (풀이 추가: for-each문/HashSet) 본문
문제
잘못된 코드
이번 로직은 꽤 잘 짰다고 생각했는데...
바로 틀렸습니다!!!
정답
일단 종전에 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을 사용한다
'JAVA > 백준 알고리즘' 카테고리의 다른 글
백준 8958 java - OX퀴즈 (1) | 2022.11.30 |
---|---|
백준 1546 java - 평균 (0) | 2022.11.28 |
백준 5597 java - 과제 안 내신 분..? (이해 안 가는 사람 위한 풀이) (0) | 2022.11.24 |
백준 2565 java - 최댓값 (0) | 2022.11.23 |
백준 10818 java - 최소, 최대 (★) (0) | 2022.11.22 |
Comments