본문 바로가기

내일배움 캠프/TIL

코딩테스트 체육복

이문제를 보고 자꾸 딕셔너리에 미친건지 딕셔너리만 생각이 나서딕셔너리로 문제를 해결하려고했었다

모든학생에 1을주고 도둑을맞으면 -1 여분이있으면 +1 을 해가지고문제를 해결하는 방식...

 

def solution(n, lost, reserve):
    students={}
    answer=0
    for student in range(1,n+1):
        students[student]=1
    for losts in lost:
        students[losts]-=1
    for reserves in reserve:
        students[reserves]+=1
    for idx in range(1,n+1):
        if students[idx]>1 and students.get(idx-1, -1)==0:
            students[idx] -=1
            students[idx-1]+=1
        if students[idx]>1 and students.get(idx+1, -1)==0:
            students[idx] -=1
            students[idx+1]+=1
    for value in students.values():
        if value>0:
            answer+=1

    return answer

뭔가 원하는대로 구현은 됬지만 for문이 5개가 연달아있는모습은 ㅋㅋㅋㅋ 너무 지저분하다

 

그래서 김근혜 스승님의 도움을 받아서 스승님이 한 코드를 전수받았다

리스트를 정렬한 후에 도둑질당한사람을for문으로 돌린후에 여유분이있으면 여유분을 지우고 없으면 -1과 +1의 위치에있는사람의 여유분을 가져오고 그게아니면 전체사람수에서 -1을 빼는방식으로 해결하는거였는데 내가 너무 틀에박힌 사고를 했던거같다