[Python/Javascript] 프로그래머스 : 완주하지 못한 선수

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

 

프로그래머스

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

programmers.co.kr

Python Answer

def solution(participant, completion):
    answer = ''
    #참여자 명단에만 있거나, 참여자 명단에서의 수가 많으면 된다.
    pDict = {} #참여자 딕셔너리
    cDict = {} #완주자 딕셔너리
    for pIdx in range(len(participant)):
        if participant[pIdx] not in pDict:
            pDict[participant[pIdx]] = 1
        else:
            pDict[participant[pIdx]] += 1
    
    for cIdx in range(len(completion)):
        if completion[cIdx] not in cDict:
            cDict[completion[cIdx]] = 1
        else:
            cDict[completion[cIdx]] += 1
    for p in pDict:
        if p not in cDict: #tc 1의 경우. 참여자에는 있으나 완주자에는 없는 경우
            return p
        else:
            if pDict[p] != cDict[p]:
                return p
    return answer

 

Javascript Answer

function solution(participant, completion) {
    var answer = '';
    pDict = {}
    cDict = {}
    
    for (i = 0; i < participant.length; i++) {
        if (!(participant[i] in pDict)) {
            pDict[participant[i]] = 1
        } else {
            pDict[participant[i]] += 1
        }
    }
    
    for (i = 0; i < completion.length; i++) {
        if (!(completion[i] in cDict)) {
            cDict[completion[i]] = 1
        } else {
            cDict[completion[i]] += 1
        }
    }
    for (p in pDict) {
        if (!(p in cDict)) {
            return p
        } else {
            if (pDict[p] !== cDict[p]) {
                return p
            }
        }
    }
    return answer;
}

 

js나 python 모두 딕셔너리를 써서 구현했다. js에서는 not in 대신 !(A in B) 사용해서 구현!

 

효율성까지 체크하는 문제였다보니 딕셔너리 말고 다른 코드도 사용해보고 싶었다.

 

for 문을 사용한 Javascript Answer

function solution(participant, completion) {
    participant.sort();
    completion.sort();

    for (var i = 0; i < participant.length; i++) {
        if (i === participant.length - 1 || participant[i] !== completion[i]) {
            return participant[i];
        }
    }
}

 

 

for문을 사용한 Python Answer

def solution(participant, completion):
    answer = ''
    participant.sort()
    completion.sort()
    
    for idx in range(len(participant)):
        if idx == len(participant) -1 or participant[idx] != completion[idx]:
            return participant[idx]
    return answer

 

TAGS.

Comments