728x90
반응형
https://www.acmicpc.net/problem/3052
문제 3052) 나머지 문제
문제)
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력)
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력)
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
NO | 예제 입력 | 예제 출력 |
1 | 1 2 3 4 5 6 7 8 9 10 | 10 |
2 | 42 84 252 420 840 126 42 84 420 126 | 1 |
3 | 39 40 41 42 43 44 82 83 84 85 |
정답 코드)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a[] = new int[10];
int num = 10;
for(int i=0; i < 10; i++) {
a[i] = sc.nextInt();
a[i] = a[i] % 42;
}
for(int i=0; i < 10; i++) {
for(int j=i+1; j < 10; j++) {
if(a[i] == a[j]) {
num--;
break;
}
if(j == 9) {
i = i+1;
j = i;
}
}
}
System.out.println(num);
}
}
배열을 이용해 총 10개의 방을 지정했습니다. 그리고 그 배열에 입력 값을 넣으면 42의 나머지가 저장되게 만들었습니다.
변수를 하나 더 지정해 총 10의 값을 지정하고 중복 for문을 이용해서 1~10까지 반복해서 비교할 수 있게끔 만듭니다. 여기서 j는 9일때 i값 증가 및 j 값 초기화로 반복문을 지속해서 수행하게 합니다. 최종적으로는 1번을 10까지 비교하고 2번을 10까지 비교하며 9번도 10까지 비교할 수 있게 만듭니다.
결과는 10개 중 중복을 제외한 결과 값이 출력되게 합니다.
다른 풀이를 보면 Arrays.sort(배열)을 이용해서 오름차순으로 정렬하게 만듭니다.
그 후 임시 변수를 지정해 다음 값과 비교합니다.
중복이 없으면 num이 1씩 증가하도록 만들고 결과를 간단하게 출력할 수 있습니다.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a[] = new int[10];
for(int i=0; i < 10; i++) {
a[i] = sc.nextInt() % 42;
}
Arrays.sort(a);
int temp = a[0];
int num = 1;
for(int i=1; i < 10; i++) {
if(temp != a[i]) {
num++;
}
temp = a[i];
}
System.out.println(num);
}
많이 풀어보면서 다양한 함수들과 코드를 간단하게 만들 수 있는 방법들을 익혀야겠어요!!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
728x90
반응형
'문제풀기 > 백준 문제풀이' 카테고리의 다른 글
[백준 문제 4344번] 평균은 넘겠지 문제 (0) | 2023.01.06 |
---|---|
[백준 문제 2577번] 숫자의 개수 문제 (0) | 2023.01.02 |
[백준 문제 1546번] 평균 문제 (0) | 2022.12.26 |
[백준 문제 10951번] A+B-4문제 (hasnext) (0) | 2022.12.26 |
[백준 문제 2884번] 알람 시계 문제 (0) | 2022.12.25 |