[TIL] 2021.09.17

TIL / / 2021. 9. 18. 01:01

오늘 한 일

  • 프로그래머스 N으로 표현
  • 코테

 

간단정리

Dynamic Programming 문제풀이

프로그래머스 N으로 표현

프로그래머스 N으로 표현 문제이다.

1. 주어진 숫자 N 을 이용하여 number 를 만들어야하며

2. N 을 사용한 횟수가 가장 적은 값을 리턴한다.

3. 최솟값이 8보다 크면 -1 을 리턴한다

 

처음에 접근이 힘들어서 문제를 20번은 읽어본 듯 하다.

 

N 을 4번 사용한 경우
-> N 1개 (+, -, *, /) N 3개
-> N 2개 (+, -, *, /) N 2개
-> N 3개 (+, -, *, /) N 1개
-> N 4개 (NNNN)

 

이 주석 부분이 핵심이다.

 

결국 N 이 4번 나와야되니 괄호건 N 을 붙인 숫자건 모든 경우의 수가 나올 수 있다.

N(1) 연산자 N(3)

N(2) 연산자 N(2)

N(3) 연산자 N(1)

N(4)

 

결국 Dynamic Programming 의 핵심인 점화식이 완성되고 문제를 해결할 수 있었다.

 

def solution(N, number):
    # N 을 1번 사용한 경우
    # N 을 2번 사용한 경우
    # .....
    # N 을 8번 사용한 경우
    # N 을 9번 이상 사용한 경우 (-1)

    # N 을 4번 사용한 경우
    # -> N 1개 (+, -, *, /) N 3개
    # -> N 2개 (+, -, *, /) N 2개
    # -> N 3개 (+, -, *, /) N 1개
    # -> N 4개 (NNNN)
    # ====================== End of Description

    # 8번 동작까지 답이 없으면 answer 는 -1 이다
    answer = -1
    # rs 에는 N 을 사용한 횟수 별 결과를 저장한다.
    # rs[0] = N 이 1번 // rs[1] = N 이 2번 ...
    rs = []
    # i = 1, 2, 3 ... 7, 8
    for i in range(1, 9):
        cases = set()
        cases.add(int(str(N) * i))
        # j = 8, 7, 6 ... 2, 1
        for j in range(0, i-1):
            # rs[0], rs[1], rs[2] ...
            for k in rs[j]:
                # rs[7], rs[6], rs[5] ...
                for l in rs[-j-1]:
                    cases.add(k + l)
                    cases.add(k - l)
                    cases.add(k * l)
                    if l != 0:
                        cases.add(k / l)
        # N 이 i 인 cases 중 정답 number 가 있을 시 사용횟수의 최솟값이다
        if number in cases:
            return i
        rs.append(cases)

    return answer

 

코테

 

모르는 문제들이 나왔다.

알고리즘 (구현?) 3문제, SQL 1문제

 

SQL 1문제는 mysql 문법을 찾아보며 해결할 수 있었다.

알고리즘은 풀어보지 못한 유형이 나와서 주석만 잔뜩적고 풀이하다가 시간을 다 보냈다.

공부한셈 치기로 하고 문제를 복기하여 풀어보고 정리해보았다.

  • 3문제 중 1번문제 복기 및 풀이완료.
  • 2번은 기억나는대로 문항을 복구해뒀고 추후 풀어볼 예정.
  • 3번은 풀어보지도 못했다.

코테 특성상 문제 공개나 풀이 공개는 불가하며 유사한 문제를 가져와봤다.

아래 문제를 응용한 문제같았다.

결국 경험이 모자라서 코테기회로 공부를 할 수 있었다.

 

https://nypc.github.io/2018/2018_online_14.html

 

https://nypc.github.io/2018/2018_online_14.html

← 목록으로 블록숫자 크기가 일정한 블록들이 놓여 있는데, 제일 아래 층에는 N 개가 나란히 놓여 있고, 그 윗층에는 N-1 개의 블록들이 아래층 블록 사이사이에 놓여 있다. 이런 식으로 블록들

nypc.github.io

 

느낀점

  • DP 를 열심히 봤는데 DP 문제가 안나와서 아쉬운 코테였다.
  • 경험이 부족함을 크게 느꼈고 결국 답은 많은 문제를 풀어보는 것임을 몸으로 느꼈다.
  • 추석 연휴에는 PC 가 없는 본가에 있을 듯.. (있는데 고장났다고 한다) TIL 휴식예정?!

 

반응형

'TIL' 카테고리의 다른 글

[TIL] 2021.09.24  (0) 2021.09.24
[TIL] 2021.09.23  (0) 2021.09.23
[TIL] 2021.09.16  (0) 2021.09.17
[TIL] 2021.09.15  (0) 2021.09.15
[TIL] 2021.09.14  (0) 2021.09.14
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기