개발공부/프로그래머스

[프로그래머스] 코딩테스트 Lv.1 완주하지 못한 선수

장아장 2022. 10. 21. 00:36

https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

Source Code : https://github.com/JangAJang/Algorithm/blob/main/프로그래머스_Lv1/완주하지%20못한%20선수/src/Solution.java

코드에 대한 생각은 쉬웠다.

 

해시맵을 이용했는데, 해시맵은 key, value로 이루어져 있으며, key에 value를 매핑해서 저장시키는 용도이다. 

key를 이용해 value를 불러오고, 수정하고, 제거하고, key-value로 저장시키기도 한다. 

 

참여자들을 해시맵으로<String, Integer>로 만들고, 여기에서 도착한 사람들을 key로 이용해 그 value를 1씩 줄여주면 된다. 

메서드를 간소화해서 사용하기 위해 조금 더 머리를 썼던 것 같다. 

 

private String getLeft(HashMap<String, Integer> map){
    for(String s : map.keySet()){
        if(map.get(s)!=0) return s;
    }
    return "";
}

이 부분이 개인적으로 아쉬웠던 것 같다. 

반복문 안에 조건문을 넣어서 들여쓰기가 2단으로 들어갔는데, 이를 1단으로 줄이기 위해서 HashMap과 String을 받는 메서드를 하나 더 만들까를 고민했다. 

 

private String getLeft(HashMap<String, Integer> map){
    String name = "";
    for(String s : map.keySet()){
        if(map.get(s)!=0) name = getNoneZeroName(s, map);
    }
    return name;
}

private String getNoneZeroName(String s, HashMap<String, Integer> map){
    if(map.get(s) != 0) return s;
    return "";
}

이런 식으로 나눌 수 있지만 사용하지 않은 이유는, 여기에서 조건문을 이용한 리턴을 하지 않는다면, map의 키값을 모두 확인 한 후 결과를 리턴하기 때문이다. 

 

반복문을 중간에 멈추고 리턴하는 것과, 전부 훑는 것의 시간 차이가 많기 때문에 위의 방식을 사용했다. 

 

혹시 더 나은 코드가 있으시다면 알려주시면 감사하겠습니다!!