위의 문제는 입력받은 10개의 정수값을 각각 42로 나누었을 때, 서로 다른 나머지가 몇가지가 나오는지 출력을 하는 문제이다.
배열과 반복문(int i)
을 이용하여 10개 정수들의 arr[i] % 42
값을 구하는것까지는 풀었으나, 그 이후에 "서로 다른 나머지의 값"을 구분해줄 코드를 작성하는 부분에 대해서 쉽사리 접근하지 못하였다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] A = new int[10];
int[] B = new int[10];
int cnt = 0;
for (int i = 0; i < 10; i++) {
A[i] = Integer.parseInt(br.readLine()); // 10개의 정수값 입력
B[i] = A[i] % 42; // B행렬에 나머지값들 대입
}
/*--------------------- 아래 부분이다. -------------------------*/
for (int i = 0; i < 10; i++) {
for(int j = 0; j < 10 ; j++) {
if(B[i] != B[j]) { // 조건 : 서로 다른 값이 몇개 있는지 출력
cnt++;
}
}
/*---------------------------------------------------------------*/
}
System.out.println(cnt);
}
처음에는 이중 for문을 구성하여 배열의 각 자리숫자를 서로 비교하여 서로 다른값을 카운트한다는 접근으로 위와같이 코드를 구성하였지만, 코드가 잘못되었다.
그래서 해답을 참고하여 주석처리된 부분의 코드를 아래와 같이 구성해주었다.
boolean bl;
for (int i = 0; i < 10; i++) {
A[i] = Integer.parseInt(br.readLine()) % 42; // 10개의 정수값 입력
}
for (int i = 0; i < 10; i++) {
bl = true; // bl값 초기화.
for (int j = i + 1; j < A.length; j++) {
if (A[i] == A[j]) { // 조건 : 서로 다른 값이 몇개 있는지 출력 ex) [0,1,0,0,0,2,3,4,3,2]
bl = false;
break; // 비교하려는 A[i]와 같은수가 배열에 존재할 시 반복문 stop. (+ bl값은 cnt의 카운트용.)
}
}
if (bl == true) {
cnt++;
}
}
System.out.println(cnt);
bollean형 변수를 선언하여 배열 내에 같은값을 찾을때마다 반복문을 중지하고 카운트가 1씩 올라가도록 코드를 구성해주고,
이중 반복문에서 변수 j의 값을 i+1
로 선언하였다.