본문 바로가기

알고리즘

완주하지 못한 선수 javascript와 python의 비교

728x90

 

 

 

해쉬를 이용한 문제풀이의 첫번째 타자인 문제다.

 

오래전에 풀었던 문제인데 코딩 인강의 첫 문제로 나와 반가웠다.

 

 

 

 

이것이 내가 예전에 풀었던 코드다.

function solution(participant, completion) {
    var answer = '';
    var obj = {};
// 객체로 만듬
    for(var i=0;i<completion.length;i++){
        if(!obj[completion[i]]) {
            obj[completion[i]] = 1;
        } else {
            obj[completion[i]]=obj[completion[i]]+1;
        }
    }

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

 

풀이 방법은 간단하다.

completion의 값을 키값으로 하는 객체를 생성하고

participant를 순회하며 해당 값이 있는지 체크

만약 없다면 바로 리턴하는 구조.

(오직 한명만 통과 못했다고 하니 예외처리가 번거롭지 않아 좋았다)

 

def solution(participant, completion):
    d = {}
    for i in completion : 
        d[i]=d.get(i,0)+1

    for i in participant:
        if(d.get(i,0)==0):
            return i
        else:
            d[i]=d[i]-1
    return

 

이것이 파이썬으로 새로 푼 문제다.

 

조금 더 간단해졌다.

파이썬이 해당 딕셔너리(자바스크립트의 객체형 데이터구조)에서 값을 가져올때

없으면 0을 리턴하는 간단한 방법이 있기 때문이다.

 

강의에서 예제로 나온 코드는 눈으로 보기 좀 불편했지만 파이썬에 익숙해질 수 있는 코드패턴이라 이해하려고 노력해야 했다.

이것이 그 코드인데

 

dnf가 문제다.

 

강의에서는 이해가 잘 안되면 파이썬 교육 받으라고 하시더라.

 

자바스크립트에서도 한줄짜리 익명함수야 빈번하게 쓰지만 저건 가독성이 너무 떨어지지 않나 생각이 들었다.

 

 

 

728x90