21.05.13 기록
-
백준 알고리즘 3052 풀이 완료
- 내가 푼 3052 풀이 (메모리 14.5MB, 시간 136ms로 통과)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class B3052 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int cnt = 0; int[] remainder = new int[10]; for(int i = 0; i < remainder.length; i++) { try { remainder[i] = Integer.parseInt(br.readLine()) % 42; } catch (IOException e) { e.printStackTrace(); } } for(int i = 0; i < remainder.length; i++) { for(int j = i+1; j < remainder.length; j++) { if(remainder[i] == remainder[j]) remainder[j] = -1; } } for(int i = 0; i < remainder.length; i++) { if(remainder[i] > -1) cnt++; } System.out.println(cnt); } }- 첫번째 for문: 값을 입력 받은 후 42로 나눈 나머지 값을 배열로 저장한다.
- 두번째 for문: 배열의 값을 서로 비교하여 중복된 값일 때에는 -1을 저장한다.
- 세번째 for문: 배열의 값이 -1보다 큰 값(중복이 아닌 값)일 때만 cnt 값을 증가 시킨다.
→ 배열 값을 어떻게 비교해야할지 모르겠어서 for문을 여러 개 사용했는데 정답이 나와서 놀랬다. (런타임 오류날 줄 알았는데..)
→ 풀이를 찾아보니 더 좋은 방법이 있어서 밑에 정리했다!- [풀이1] HashSet 사용하기 (배열 사용 안한 ver.)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; public class B3052 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); HashSet<Integer> hs = new HashSet<Integer>(); for(int i = 0; i < 10; i++) { try { hs.add(Integer.parseInt(br.readLine()) % 42); } catch (IOException e) { e.printStackTrace(); } } System.out.println(hs.size()); } }- HashSet은 중복된 값을 저장하지 않으며, 순서의 개념이 없다.
- [풀이2] 크기가 42인 배열 사용하기(feat. boolean)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class B3052 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); boolean[] arr = new boolean[42]; for(int i = 0; i < 10; i++) { try { arr[Integer.parseInt(br.readLine()) % 42] = true; } catch (IOException e) { e.printStackTrace(); } } int cnt = 0; for (boolean val : arr) { if(val) cnt++; } System.out.println(cnt); } } } }- 나머지 값을 인덱스로 사용하여 boolean 배열에서 true를 준다.
- 이후 true인 값만 카운트하여 카운트 값을 출력한다.