나의 원씽 플랜
0. 확언
- 어제보다 더 나은 사람이 되기
- 질보다 양이다. 꾸준함으로 버티자.
1. 미라클모닝
- 6시 기상성공
2. 팔굽혀펴기
- 백신맞기 전에 완료 (2일정도 쉴까 고민중)
3. CAKE 10분 학습하기
- O
4. 전문지식 공부하기 (알고리즘, CS, python 심화)
- O
5. TIL 작성하기
오늘 한 일
- Cake 학습
- 프로그래머스 문제 풀이
간단정리
Cake 일일 퀴즈
어이가 없네?
I don't believe this. (말도 안돼)
This is absurd. (정말 황당하다)
I was dumbfounded. (어안이 벙벙했어요)
I'm at a loss for words. (할 말을 잃었어요)
Are you kidding me? (지금 장난해?)
You can't be serious. (어처구니가 없네)
I don't know what to say. (뭐라 말할지 모르겠어)
Cake 일일 회화
finalize : (동사) ~을 최종 확정하다
deal : (명사) 거래(계약)
firm : (명사) 회사, 업체
stop by : 잠깐 들르다
be full of beans : 아주 신나다, 에너지가 넘치다
Way to go! : 잘했어! 잘됐다! 바로 그거야!
프로그래머스 문제 풀이
시간남을 때 1~2 레벨을 모두 풀어보는 것을 목표로 풀기 시작
자신감 증진을 위해(?) 1레벨 부터 풀어보는 중이다.
숫자 문자열과 영단어
https://programmers.co.kr/learn/courses/30/lessons/81301
풀이
어제 정규식 문제를 풀었더니 정규식으로 접근하게 되었다.
문제를 풀다보니 정규식은 필요없고 replace 만 사용해도 해결이 되길래 바로 갈아탔다.
# 처음에 정규식으로 접근을 하려고 했음.
# 로직을 짜다보니 replace 로 한 번에 끝나서 제출.
def solution(s):
number_dict = {
'zero': 0,
'one': 1,
'two': 2,
'three': 3,
'four': 4,
'five': 5,
'six': 6,
'seven': 7,
'eight': 8,
'nine': 9
}
for key in number_dict.keys():
s = s.replace(key, str(number_dict[key]))
answer = int(s)
return answer
키패드 누르기
https://programmers.co.kr/learn/courses/30/lessons/67256
풀이
line 을 찾고 중간 값을 누르면 이를 기억해 1을 빼주는 방식으로 풀이했다.
다른 사람의 답을 보니 그냥 2차원 배열로 키패드를 만들고 가로 세로 거리를 구하는 방식을 사용했다.
다른 사람의 풀이가 조금 더 직관적이고 문제의 출제의도와 맞는 듯 하다.
# my answer
def solution(numbers, hand):
# 1,4,7 은 무조건 L
# 3,6,9 는 무조건 R
# 왼손 오른손 현재 위치를 기억할 변수가 필요
# 현재 위치를 기준으로 거리를 체크하는 로직이 필요
# 거리가 같은지 비교하고 같으면 hand 기준으로 처리
answer = ''
left_distance = 0
left_line = 3
right_distance = 0
right_line = 3
# keyword : 숫자만을 입력한다.
# 입력된 숫자는 3으로 나눠진다?
# if number == 0 / number//3 == 0 / number//3 == 1 / number//3 == 2
def line_checker(number):
if number == 0:
return 3
else:
return (number-1)//3
while len(numbers) > 0:
if numbers[0] in [1, 4, 7]:
answer += 'L'
left_line = line_checker(numbers[0])
left_distance = 0
elif numbers[0] in [3, 6, 9]:
answer += 'R'
right_line = line_checker(numbers[0])
right_distance = 0
else:
number_line = line_checker(numbers[0])
if abs(number_line - left_line) + left_distance < abs(number_line - right_line) + right_distance:
answer += 'L'
left_line = line_checker(numbers[0])
left_distance = -1
elif abs(number_line - left_line) + left_distance > abs(number_line - right_line) + right_distance:
answer += 'R'
right_line = line_checker(numbers[0])
right_distance = -1
else:
if hand == "left":
answer += 'L'
left_line = line_checker(numbers[0])
left_distance = -1
else:
answer += 'R'
right_line = line_checker(numbers[0])
right_distance = -1
numbers.pop(0)
return answer
# best answer
# 키패드를 좌표로 2차원 행렬을 만들고 가로거리 세로거리를 구하는 방식인듯.
# 출제자가 원하는 해결방식일듯..
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
느낀점
- 오늘도 고생했다~ (feat. 백신휴가)
- 프로그래머스 1레벨도 머리쓰게하는 문제가 많은듯.. 많이 풀어보자!
'TIL' 카테고리의 다른 글
[TIL] 2021.09.26 (0) | 2021.09.26 |
---|---|
[TIL] 2021.09.25 (0) | 2021.09.25 |
[TIL] 2021.09.23 (0) | 2021.09.23 |
[TIL] 2021.09.17 (0) | 2021.09.18 |
[TIL] 2021.09.16 (0) | 2021.09.17 |
최근댓글