본문 바로가기

CodingTest/Programmers

[ 프로그래머스 ] 스킬체크 탄탄한 비기너

오랜만에 파이썬으로 코딩테스트 문제를 푸려고 하니 자바스크립트 문법이랑 헷갈려서 조금 버벅였습니다.

 

코딩테스트 문제 아이디어 떠올리는 것 자체도 머릿 속에서 구조가 바로 안 잡히기도 했습니다.

 

다행히 낮은 난이도의 문제라서 적절한 시간 내에 풀이할 수 있었습니다.

 

첫 번째 문제는 10분, 두 번째 문제는 27분이 걸렸습니다.

 

 

 

 

두 문제 다 문자열을 이용한 문제였습니다.

 

 

첫 번째 문제

def solution(s):
    sList = list(map(int, s.split(" ")))
    answer = str(min(sList)) + " " + str(max(sList))
    return answer

순간적으로 map함수의 구조가 생각나지 않았습니다. 

한동안 집중적으로 Javascript를 공부하고 있어 JS의 Array Map 함수 구조인

 array.map(function(currentValue, index, arr), thisValue)    // JavaSctipr Map function

이 생각났습니다. 심지어 JS의 Map 자료구조도 생각나더군요.

 

 

기억을 되살리려 노력하지 않고 그냥 검색해서 찾았습니다. 

map(function, iterable, ...)  # Python Map Function 

문법 헷갈리지 않도록 주의를 많이 해야겠습니다. 

 

 

두 번째 문제 역시 문자열을 활용하는 문제였습니다. 이전에 한 번 풀이한 경험이 있어 어렵지는 않았지만, 오히려 기존 풀이가 기억나니 그걸 복기하려는 관성과 문제 자체를 풀어야하는 집중력이 충돌해서 약간 시간이 걸린 것 같습니다.

결과적으로 깔끔하게 풀이한 것 같습니다. 함수나 변수명을 예쁘게 짓는데에 노력해서 작성해봤습니다.

def solution(record):
    userNameDict = {}
    chatHist = []
    answer = []
    for rec in record:
        user = rec.split(" ")
        # user[1]:userId, user[0]:userAction, user[2]:userName
        userAction = user[0]
        userId = user[1]

        if userAction == 'Enter':
            userName = user[2]
            userNameDict[userId] = userName
            chatHist.append([userId, "님이 들어왔습니다."])

        elif userAction == "Change":
            userName = user[2]
            userNameDict[userId] = userName

        elif userAction == "Leave":
            chatHist.append([userId, "님이 나갔습니다."])

    for hist in chatHist:
        userName = userNameDict[hist[0]]
        userAction = hist[1]

        answer.append(userName + userAction)


    return answer