강의로 돌아가기
전해동

if문이 작동을 안 합니다. 왜 이런걸까요?

class Solution {
public String solution(String[] participant, String[] completion) {
HashMap participantMap = new HashMap();
HashMap completionMap = new HashMap();
String Answer = "";

int participantLength = participant.length;
int completionLength = completion.length;

Arrays.sort(participant);
Arrays.sort(completion);

for(int i = 0; i< completionLength; i++){
participantMap.put(i,participant[i]);
completionMap.put(i,completion[i]);

if(participantMap.get(i).toString()!=completionMap.get(i).toString()){
Answer = participantMap.get(i).toString();
}
else{
Answer = participant[participantLength-1];
}
}
return Answer;
}
}

저는 우선 마라톤 참가자들과 성공자들의 배열을 모두 정렬한 다음, 해쉬맵에 담았습니다.
그리고 두 해쉬맵을 비교했습니다.

정렬한 다음 해쉬맵에 값을 넣었기 때문에, 두 해쉬맵은 모두 같은 Key값에서 같은 Value를 가리키게 됩니다. 오직 동명이인이 있을 경우에만 두 해쉬맵이 같은 Key에서 다른 Value를 가리키게 됩니다. 왜냐하면 동명이인이 있을 경우, 정렬을 하고 입력하더라도 Key값이 하나 밀리게 되기 때문입니다.

따라서 두 해쉬맵이 같은 Key에서 다른 Value를 가리키는 경우, 저는 동명이인이 참가해서 그 중 한명이 탈락한 케이스라고 판단했습니다. 그래서 if문을 이용했습니다.

하지만 어째선지, if문의 조건이 만족되지 않는 상황에서도 if문안의 내용이 작동했습니다. 어째서 그렇게 되는지 이해가 안 갑니다. 프로그래머스의 채점 사이트가 아닌, 이클립스를 비롯한 여타 다른 IDE를 이용해 코딩하면 결과가 제대로 나옵니다. 심지어 타 온라인 자바 컴파일러 사이트에서 컴파일을 해도 제대로 된 결과가 나옵니다.

오직 프로그래머스 사이트에서만 if문이 작동하지 않습니다. 혹시 이유를 알 수 있을까요?

아래는 타 온라인 자바 컴파일러 사이트에서 제대로 작동했던 코드입니다. 테스트가 돌아갈 수 있도록 메인 클래스만 만들었고, Solution 클래스는 변한게 없습니다. 여기선 모든 3가지 테스트 케이스가 모두 제대로 작동했습니다.

/*
algospot.com/judge/problem/read/AMUSEMENTPARK
Programmed by 21212004 Haedong_Jeon
2019.03.23
*/

import java.util.*;
public class main{
public static void main(String[] args){
String[] participant = { leo, kiki, eden};
String[] completion = { eden, kiki};
Solution s1 = new Solution();
System.out.println(s1.solution(participant, completion));

}
}

class Solution {
public String solution(String[] participant, String[] completion) {
HashMap participantMap = new HashMap();
HashMap completionMap = new HashMap();
String Answer = "";

int participantLength = participant.length;
int completionLength = completion.length;

Arrays.sort(participant);
Arrays.sort(completion);

for(int i = 0; i< completionLength; i++){
participantMap.put(i,participant[i]);
completionMap.put(i,completion[i]);

if(participantMap.get(i).toString()!=completionMap.get(i).toString()){
Answer = participantMap.get(i).toString();
}
else{
Answer = participant[participantLength-1];
}
}
return Answer;
}
}

1 개의 답변
Demi

혹시 문자열 비교할때 equals 쓴게 아니라 == 쓰신게 아닐까요?
자바에서는 equals 메소드를 사용하셔야해요

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.