- 반복문 for와 배열을 이용하는 문제이다.
처음에 두번째 예제까지 출력값이 같아서 맞는 코드라고 생각했는데 세번째 예제를 입력하니까 출력값이 다르게 떠서 애먹었던 문제 😅
10개의 수를 받고 42로 나눈 나머지 값을 배열에 담아 서로 다른 수의 개수를 출력하는 문제이다
[제출답안]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int arr[] = new int[10];
int count = 0; //서로 다른 수가 몇 개인지 담는 변수
for(int i = 0; i<arr.length; i++) {
int num = s.nextInt();
arr[i] = num%42;
}
for(int i=0; i<arr.length; i++) {
int temp = 0;
for(int j=i+1; j<arr.length; j++) {
if(arr[i]==arr[j])temp++;
}
if(temp==0) {
count++;
}
}
s.close();
System.out.println(count);
}
}
[풀이]
1. 값을 입력받는 스캐너 생성, import
2. 10개의 수를 넣을 배열 arr생성
3. for문으로 길이가 arr배열에 입력받은 수를 42로 나눈 나머지를 10번 담아준다.
4. 해당 배열에 서로 다른 수가 몇개인지 판별하는 for반복문 작성
4-1) for문 안에 temp를 반복 생성하여 0~9까지 아래 for문을 통해 같은 수가 있을 경우 ++로 수를 증가시켜준다
5) for문 안에 for문을 담아 arr배열의 인덱스 값과 그 다음 인덱스 값을 비교해 중복을 확인
6) for문을 돌아 temp값이 증가되면 해당 숫자가 중복으로 사용되었다는 뜻
7) temp가 0일때만 count를 증가시켜 서로 다른 수의 개수를 확인할 수 있다.
예제) arr의 나머지 값이 [0,1,1,2,2,3,3,4,5,6] 인 경우
i가 0일 때
arr[0]==arr[1~9] 비교 -> 0은 한번밖에 없기 때문에 temp값이 증가하지 않고 0이 됨 -> count++
i가 1일 때
arr[1]==arr[2~9] 비교 -> 1이 뒤에 나오기 때문에 temp값 증가하고 count값은 변하지 않음
i가 2일 때
arr[2]==arr[3~9] 비교 -> 2기준으로 3번째 부터는 1이 나오지 않기 때문에 temp값 증가 count++
...
arr[8]==arr[9] 비교-> count++
결과 = 7
** 이중 for문으로 사용한 구문으로 해당 i번의 배열을 i+1이후의 값과 모두 비교한 후 temp값을 증가시키므로
여러개의 동일 값이 존재하는 경우 마지막에 위치한 값만 count해서 정확한 개수를 구할 수 있다
[백준 실행 결과]
- 반복문을 이중으로 쓴 적이 별로 없어서 어렵다고 느낀 문제였다.
'Etc > 코딩테스트' 카테고리의 다른 글
[백준] 1546번 - 평균 문제풀이 JAVA 자바 for문, 배열 (0) | 2023.09.08 |
---|---|
[백준] 10811번 - 바구니 뒤집기 문제해설 자바 JAVA (0) | 2023.09.08 |
[백준] 2438번 - 별찍기 문제풀이 자바 JAVA for반복문 사용 (0) | 2023.09.04 |
[백준] 15552번 - 빠른 A+B 문제풀이 자바 JAVA - BufferedReader 런타임에러 (0) | 2023.09.03 |
[백준] - 25314번 코딩은 체육과목 입니다 풀이 JAVA 자바 for문 (0) | 2023.09.03 |