-
[Algorithm] 백준/Bronze/3052. 나머지Algorithm/문제 풀이 2023. 4. 9. 01:51
하루입니다.
https://www.acmicpc.net/problem/3052
3052번: 나머지
각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.
www.acmicpc.net
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
즉, 서로 다른 나머지 개수를 구하는 문제이다.
- 가장 처음 든 생각은 idx 42까지 가진 배열을 만들고, 나머지에 해당하는 칸이 비었다면 1씩 추가하는 그런 방법을 사용할까? 였다. 그런데 굳이 빈 배열을 만들 필요가 있나 싶어서 list쪽으로 생각해봤다.
- list에 나머지를 add()하면 나머지 갯수만큼의 요소를 가진 list가 생기겠지. 그런데 중복이 불가하다. 그러면 indexOf()를 사용해서 해당 값이 없다면(-1이라면) 요소를 삽입하자. (Set 사용 생각을 못 했음)
- HashSet 사용!
1. list 사용
import java.util.*; import java.io.*; class Main { public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); List<Integer> arr = new ArrayList<>(); for(int i = 0; i < 10; i++) { int num = Integer.parseInt(br.readLine()); if(arr.indexOf(num%42) == -1) { arr.add(num%42); } } System.out.println(arr.size()); } }2. hashSet 사용
import java.util.*; import java.io.*; class Main { public static void main(String args[]) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); HashSet<Integer> hs = new HashSet<>(); for(int i = 0; i < 10; i++) { int num = Integer.parseInt(br.readLine()); hs.add(num%42); } System.out.println(hs.size()); } }
여담
hashSet에 get()이 없는 이유는 idx가 없기 때문이다. 순서 없이 저장되기 때문. 그렇기에 값을 꺼내기 위해서는 Iterator를 사용해야 하며, 값이 있는지 확인하기 위해서는 contains()를 사용하면 된다. 아래와 같이 ... 너무 오랜만이라 코드를 들고 왔다. add! iterator! hasNext! next!
Set<String> mySet = new HashSet<>(); mySet.add("apple"); mySet.add("banana"); mySet.add("orange"); String target = "banana"; Iterator<String> iterator = mySet.iterator(); while (iterator.hasNext()) { String element = iterator.next(); if (element.equals(target)) { // 원하는 값을 찾았을 때의 처리 } }Github Link
오늘도 감사합니다.
'Algorithm > 문제 풀이' 카테고리의 다른 글
[Algorithm] Softeer/L1/근무 시간 (0) 2023.04.08 [Algorithm] 백준/Bronze/2798. 블랙잭 (0) 2023.04.07 [Algorithm] 백준/Bronze/2908. 상수 (0) 2023.04.07 [Algorithm] 백준/Bronze/2675. 문자열 반복 (getBytes()) (0) 2023.04.07 [Algorithm] 백준/Bronze/10757. 큰 수 A+B (BigInteger) (0) 2023.04.06