개발(0)/CodingTest
[프로그래머스/Level1]완주하지 못한 선수 - 자바
까만밀가루
2024. 5. 9. 19:57
https://school.programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[배운점]
- set → get(i) 쓰면서 값을 꺼내지 못한다.
- 배열 → 리스트 변경시 사용 메소드 : Arrays.asList 인 경우 생성된 리스트의 크기 고정, 요소 추가 및 제거가 불가능하다. 때문에 ArraysList로 변경을 해줘야 한다.
해당 에러 :UnsupportedOperationException
List<String> list = new ArrayList<>();
for (String s : participant) {
list.add(s);
}
[문제 풀이]
set이나 List로 변경하여 포함 여부를 확인 후 제거하여 남은 값을 꺼내려고 했으나 런타임이나 시간 초과가 컸다. 아무래도 시간복잡도에서 for문이 2번이라 그런지.. 예시는 통과하지만 테스트 케이스에서 통과 못 한 코드↓↓
public class 완주하지_못한_선수_Q {
public static void main(String[] args) {
String[] participant = {"marina", "josipa", "nikola", "vinko", "filipa"};
String[] completion = {"josipa", "filipa", "marina", "nikola"};
System.out.println(solution(participant, completion));
}
public static String solution(String[] participant, String[] completion){
String answer = "";
List<String> list = new ArrayList<>();
for (String s : participant) {
list.add(s);
}
List<String> list2 = new ArrayList<>();
for (String s : completion) {
list2.add(s);
}
for(int i = 0 ; i< list2.size();i++){
for(int j = 0 ; j < list.size() ; j++){
if(list2.get(i).equals(list.get(j))){
list.remove(j);
}
}
}
return list.get(0);
}
}
[정답 풀이]
일단 배열을 sort한 후 completion에 없는 값이라면 바로 return 하게 한다.
이때 participant의 마지막 값이 없는 경우라면, for문의 마지막 i++ 된 값을 넣어 그 값을 return 하게 한다.
(문제 조건 completion의 길이는 participant의 길이보다 1 작다)
import java.util.Arrays;
public class 완주하지_못한_선수 {
public static void main(String[] args) {
String[] participant = {"marina", "josipa", "nikola", "vinko", "filipa"};
String[] completion = {"josipa", "filipa", "marina", "nikola"};
System.out.println(solution(participant, completion));
}
public static String solution(String[] participant, String[] completion){
Arrays.sort(participant);
Arrays.sort(completion);
int i = 0;
for( i = 0; i< completion.length;i++){
if(!participant[i].equals(completion[i])){
return participant[i];
}
}
return participant[i];
}
}