전공/coding test

프로그래머스3 - 첫 level up!

import ysy 2022. 3. 31. 14:00

오늘은 level 1이 아니라 level 2에 도전해보았다!
문제 난이도가 많이 차이나는 것 같았다. ㅠㅠ
바로 풀이법이 떠오르지 않았고 시간도 오래걸렸다.
2시간 내에 풀고 안풀리면 답을 보겠다는 다짐과 다르게
정확히 시간을 잰 건 아니였지만 아마도 2시간을 초과 했을 것이다.
그래도 끝내 풀었으니 되었다!!

문제: 프로그래머스 - (추가예정)
난이도: Level 2

내 답안

def solution(record):
    nickname = {}
    num_ans = 0
    answer=[]
    for str in record:
        uid = str[6:13]
        n_name = str[14:]
        if (str in "Enter"):
            nickname[uid] = n_name
            answer[num_ans] = uid + "님이 들어왔습니다."
            num_ans += 1
            break
        if (str in "Leave"):
            answer[num_ans] = uid + "님이 들어왔습니다."
            num_ans += 1
            break
        if (str in "Change"):
            nickname[uid] = n_name
            break
    # uid 2 nickname
    for i in len(answer):
        answer[i].replace(answer[i][:7],nickname[answer[i][:7]])
    
    return answer

글자 수를 직접 세서 코드를 작성한….
만약 user id가 각기 다른 길이를 가졌다면 못쓰는 코드다..ㅠㅠ
그리고 string과 list가 왜 이렇게 헷갈리는지…
두 대상에 대한 함수와 기능이 너무 헷갈린다.
이 부분 때문에 전에 대회에서 전처리 할 때도 애를 먹었는데 아직도 이런다.
이번에 코테 준비하면서 완전정복해야겠다.

모범답안

def solution(record):
    result = []
    info = {}
    for r in record:
        r = r.split()
        #들어온 경우
        if r[0] == "Enter":
            result.append([r[1], "님이 들어왔습니다."])
            info[r[1]] = r[2]
        #나간경우
        elif r[0] == "Leave":
            result.append([r[1], "님이 나갔습니다."])
        #변경된 경우
        else:
            info[r[1]] = r[2]
    result = list(map(lambda x : info[x[0]]+x[1], result))
    return result

확실히 깔끔하다.
특히 문자열을 바로 split해준 것은 무조건 배워야 할 점인 것 같다.
list(map(lambda()))는 정말 화려해보이는데 나도 익숙해져야 할 것 같다.

반응형