이 포스팅은 자바 8버전으로 풀이가 됐습니다.
문제
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
입력
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
출력
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
// 3052번
public class Main {
public static void main(String[] args)throws IOException {
try {
BufferedReader rd = new BufferedReader(new InputStreamReader (System.in));
int B = 42, count=0;
int num[] = new int[10];
// 10개의 값 입력
for(int i=0;i<=9;i++) {
int A = Integer.parseInt(rd.readLine());
num[i] = A%B;
}
for(int j=0;j<=9;j++) {
int res=0;
for(int i=j+1;i<=9;i++) {
if(num[i]==num[j]){
res++;
}
}
if(res==0) {
count++;
}
}
System.out.println(count);
}
catch(IOException e) {
System.out.print("error");
}
}
}
|
풀이
step 1) 조건 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지라는 조건을 우선 해석하고 코드화한다.
-> 두 자연수 A, B는 A는 입력 B는 42의 값을 갖는 변수를 선언한다. 11번 라인 B선언 16번 라인 A입력
step 2) 수를 10개 입력받는다.
-> num[] 정수형 배열을 선언하여 각각의 요소 값으로 입력받는다.
step 3) 값을 비교하여 count로 중복 값을 확인한다.
예제 1번을 기준으로 1, 2, 3, 4, 5, 6, 7, 8, 9, 10을 예시로 든다.
이 그림은 20번 라인의 코드에 대한 설명이다.
배열을 0부터 시작하는 경우 다음과 같은 그림으로 볼 수 있다.
j가 i를 품고 있는 코드이므로 j가 0번의 배열을 조회할 때 i는 j보다 +1번의 값을 조회해야 같은 값을 조회하지 않고 다른 값들을 조회할 수 있다.
조회를 반복해야 하는 그림으로 표현하면 다음과 같다.
위 그림처럼 배열은 0번부터 시작하기 때문에 i를 갖는 for 반복문에서는 i 변수를 정의할 때 j+1를 활용하여 갖고 오면 값을 비교할 수 있게 된다. 이때 중복되는 값이 있다면 res 변수를 증가시켜서 count를 제외하고 중복되는 값이 없다면 count 값을 증가시켜서 값을 측정하면 된다.
오타나 문제에 이상이 있는 경우나 모든 문의는 댓글로 부탁드리겠습니다!
효율이 되게 나쁘게 풀린 문제인 것 같아서 향후에 추가로 작성할 수 있으면 좋을 것 같습니다.
짧은 포스팅 읽어주셔서 감사드립니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Java' 카테고리의 다른 글
[백준 - 1712][Java]손익분기점 (0) | 2022.05.16 |
---|---|
[백준 - 15596][Java] 정수 N개의 합 (0) | 2022.05.15 |
[백준 - 4344][Java] 평균은 넘겠지 (0) | 2022.05.13 |
[백준 - 1110] [Java] 더하기 사이클 (0) | 2022.05.12 |
[백준 - 2884] [Java] 알람 시계 (0) | 2022.05.11 |