[TIL] 2021.09.24

TIL / / 2021. 9. 24. 19:08

나의 원씽 플랜

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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기