티스토리 뷰

반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
def solution1(numbers, hand):
    answer = ''
    flag=False
    if hand=='right':
        flag=True
    else:
        flag=False
    pad={}
    pad[1]='00'
    pad[2]='01'
    pad[3]='02'
    pad[4]='10'
    pad[5]='11'
    pad[6]='12'
    pad[7]='20'
    pad[8]='21'
    pad[9]='22'
    pad[0]='31'
    leftStart=[3,0]
    rightStart=[3,2]
    for number in numbers:
        if number in [1,4,7]:
            answer+='L'
            leftStart[0]=int(pad[number][0])
            leftStart[1]=int(pad[number][1])
        elif number in [3,6,9]:
            answer+='R'
            rightStart[0]=int(pad[number][0])
            rightStart[1]=int(pad[number][1])
        else:
            valX=int(pad[number][0])
            valY=int(pad[number][1])
            leftTotal=int(abs(leftStart[0]-valX))+int(abs(leftStart[1]-valY))
            rightTotal=int(abs(rightStart[0]-valX))+int(abs(rightStart[1]-valY))
            if leftTotal==rightTotal:
                if flag:
                    answer+='R'
                    rightStart[0]=int(pad[number][0])
                    rightStart[1]=int(pad[number][1])
                else:
                    answer+='L'
                    leftStart[0]=int(pad[number][0])
                    leftStart[1]=int(pad[number][1])
            else:
                if leftTotal<rightTotal:
                    answer+='L'
                    leftStart[0]=int(pad[number][0])
                    leftStart[1]=int(pad[number][1])
                else:
                    answer+='R'
                    rightStart[0]=int(pad[number][0])
                    rightStart[1]=int(pad[number][1])
        
    return answer
cs

위의 코드는 처음 제출한 코드이다.

여기서 우선 수정해야 할 부분은 key,value 매핑하는 부분에서 저렇게 일렬로 쭉 나란히 쓰는 것보다는 { } 여기 안에 key:(value1,value2) 구조로 작성했으면 더욱 깔끔 했을 것 같다.

그리고 처음에 왼손 오른손 좌표를 리스트를 표현했는데 이것도 그냥 처음에 pad에서 '*','#' 의 value를 설정함으로써 그 이후의 for문에서 key값을 찾아서 value를 가져오는 식으로 했다면 코드가 더욱 더 심플했을 것이다.

그 이외에는 괜찮은 것 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def solution(numbers, hand):
    answer = ''
    key_dict = {1:(0,0),2:(0,1),3:(0,2),
                4:(1,0),5:(1,1),6:(1,2),
                7:(2,0),8:(2,1),9:(2,2),
                '*':(3,0),0:(3,1),'#':(3,2)}
 
    left = [1,4,7]
    right = [3,6,9]
    lhand = '*'
    rhand = '#'
    for i in numbers:
        if i in left:
            answer += 'L'
            lhand = i
        elif i in right:
            answer += 'R'
            rhand = i
        else:
            curPos = key_dict[i]
            lPos = key_dict[lhand]
            rPos = key_dict[rhand]
            ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
            rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
 
            if ldist < rdist:
                answer += 'L'
                lhand = i
            elif ldist > rdist:
                answer += 'R'
                rhand = i
            else:
                if hand == 'left':
                    answer += 'L'
                    lhand = i
                else:
                    answer += 'R'
                    rhand = i
 
    return answer
cs

위의 코드는 프로그래머스에서 상위권에 속한 코드이다.

이걸 보고 사전 값을 디폴트로 저장할 때 저런 식으로 하면 되겠다 하고 생각했다.

반응형

'알고리즘 > 프로그래머스' 카테고리의 다른 글

2021 KAKAO BLIND RECRUITMENT 메뉴 리뉴얼  (0) 2021.02.01
2020 KAKAO BLIND RECRUITMENT문자열 압축  (0) 2021.01.30
2021 KAKAO BLIND RECRUITMENT순위 검색  (0) 2021.01.28
실패율  (0) 2021.01.27
비밀지도  (0) 2021.01.27
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함