티스토리 뷰
반응형
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
링크
TAG
- 프로그래머스
- Pattern
- Java
- PostgreSQL
- 카카오
- 파이썬
- 2021 KAKAO BLIND RECRUITMENT
- 백준
- 자바
- postgres
- django
- docker-compose
- headers
- dockerignore
- Spring
- thread
- 그래프
- docker
- setattr
- BFS
- 면접
- 알고리즘
- Python
- Command Line
- Linux
- Celery
- ubuntu
- env
- Collections
- DRF
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함