# 3052번 나머지
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

* 풀이
어려워,,,
서로 다른 값 구하는 걸 어떻게 해야 할지 모르겠어서 이것저것 해보다가 결국 검색했다.
HashSet을 이용한 방법이 많이 나오던데 그보다는 나에게 익숙한 for문과 if문을 이용한 코드를 봤다.
> for문 if문을 이용한 풀이
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] num = new int[10]; // num 배열
int cnt = 0;
for(int i = 0; i < num.length; i++){
num[i] = sc.nextInt()%42; // 42로 나눈 나머지를 저장한다.
boolean bl = false; // 나머지가 이미 존재하는 값인지 체크하는 변수
for(int j = 0; j < i; j++) { // 나머지값 비교
if(num[i] == num[j]){
bl = true;
break; // 중복 발견되면 bl을 true로 바꾸고 비교 중단
}
}
if(bl == false){ //중복이 없을 시 cnt++
cnt++;
}
}
System.out.print(cnt);
}
}
> HashSet을 이용한 풀이
HashSet은 중복을 허용하지 않는 집합 (set)
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashSet<Integer> hs = new HashSet<Integer>(); // HashSet 생성. 중복을 허용하지 않는 집합
for (int i = 0; i < 10; i++) {
hs.add(sc.nextInt() % 42);
// 42로 나눈 나머지를 HashSet에 추가. 이미 들어간 중복값은 자동으로 무시된다.
}
System.out.println(hs.size()); // 서로 다른 나머지 개수 출력
}
}
이 문제를 풀면서 같은 문제를 푸는 방식은 다양하다는 것을 다시 한 번 느꼈다..
'코테 > 백준' 카테고리의 다른 글
| [백준 / java 11] 27866번 문자와 문자열 (0) | 2025.05.21 |
|---|---|
| [백준 / java 11] 11654번 아스키 코드, 2743번 단어 길이 재기 (0) | 2025.05.15 |
| [백준 / java 11] 1차원 배열 > 5597번 과제 안 내신 분...? (0) | 2025.05.13 |
| [백준 / java 11] 1차원 배열 > 10813번 공 바꾸기 (0) | 2025.05.12 |
| [백준 / java 11] 1차원 배열 > 10810번 공 넣기 (0) | 2025.05.10 |