개발(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];
    }
}