인프런 커뮤니티 질문&답변

maldoneee님의 프로필 이미지

작성한 질문수

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

11. 임시반장정하기

i와 j가 같은 경우를 처리하면 왜 오답이 될까요/

작성

·

240

0

solution 메서드에서 i와 j가 같은 경우를 강의에서 말씀해주신 대로 상관하지 않아도 되지만 연산 횟수를 줄여보고 싶었습니다.

그래서 for(int j = 1; j<=n; j++) 바로 밑 줄인 8번라인에

if (i == j) {

continue;

}

이 3줄만 추가하고 나머지 코드는 수정을 안 했는데 오답이 뜹니다.

어떤 곳에 영향을 끼쳐 오답이 되게 되는지 생각이 나지 않아서 질문 드립니다ㅠ

답변 5

0

continue동작을 생각하면 if, else 추가에 상관없이 돌아가야할 것 같은데요... 

저도 질문자님처럼 continue 넣은 코드로는 왜 통과가 안되는지 궁금합니다.

0

삼중for문 k 가 if(i==j)문 안으로 들어가야 합니다.

0

if else 문을 추가해주지 않아서 그런 것 같습니다.

제 풀이 공유해드려요

import java.util.*;

class Main{

public int solution(int n, int[][] arr) {

int answer = 0;

int[] matchNum = new int[n];

int maxNum = 0;

int maxIndex = 0;

for(int i=0; i<n; i++) {

for(int j=0; j<n; j++) {

if(i==j) {

continue;

} else {

for(int k=0; k<5; k++) {

if(arr[i][k] == arr[j][k]) {

matchNum[i]++;

break;

}

}

}

}

}

for (int i=0; i<matchNum.length; i++) {

if (matchNum[i] > maxNum) {

maxNum = matchNum[i];

maxIndex = i;

}

}

answer = maxIndex + 1;

  return answer;

}

public static void main(String[] args) {

Main T = new Main();

Scanner in = new Scanner(System.in);

int n = in.nextInt();

int[][] arr = new int[n][5];

for(int i=0; i<n; i++) {

for(int j=0; j<5; j++) {

arr[i][j] = in.nextInt();

}

}

in.close();

System.out.println(T.solution(n, arr));

}

}

0

maldoneee님의 프로필 이미지
maldoneee
질문자

import java.util.*;
class Main {
public int solution(int n, int[][] arr){
int answer=0, max=0;
for(int i=1; i<=n; i++){
int cnt=0;
for(int j=1; j<=n; j++){
                               // 추가한 부분
                               if (i == j)
                                     continue;
                               // 추가한 부분
              
for(int k=1; k<=5; k++){
if(arr[i][k]==arr[j][k]){
cnt++;
break;
}
}
}
if(cnt>max){
max=cnt;
answer=i;
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n=kb.nextInt();
int[][] arr=new int[n+1][6];
for(int i=1; i<=n; i++){
for(int j=1; j<=5; j++){
arr[i][j]=kb.nextInt();
}
}
System.out.print(T.solution(n, arr));
}
}
선생님께서 답으로 제공해주신 코드에 //추가한 부분 사이의 코드 2줄만 추가했습니다. 오답이 되는 이유가 잘 파악이 안되네요 ㅠ

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

혹시 모르니 풀코드를 올려주세요.