[NeetCode/Python] Climbing Stairs

2024. 8. 17. 23:29· Algorithm/NeetCode

문제 링크: https://neetcode.io/problems/climbing-stairs

 

NeetCode

 

neetcode.io

 

단순한 조합 문제라고 생각했다. 이런 비슷한 문제를 예전에 풀었지만 나중에야 기억이 났는데.. 암튼 초반에 그래서 삽질을 좀 했다.

 

[초반 틀린 풀이]

from itertools import permutations

class Solution:
    def climbStairs(self, n: int) -> int:
        # 조합 구하기 + 순서 고려
        
        result = 1 # consist of all 1s + possible 2s
        for i in range(1, n//2 + 1): # i = num of 2
            goal = n
            numOf1s = goal - i * 2
            numbers = [2 for b in range(i)]
            numbers.extend([1 for a in range(numOf1s)])
            result += permutations(numbers, len(numbers))

        return result

 

먼저 식에 들어갈 수 있는 2의 최대 개수부터 시작해서 줄여나갔다. 그러면 2와 1의 조합은 쉽게 구할 수 있는데, 문제는 이게 조합이 아니라 순열이었다는 점이다!

문제를 꼼꼼히 보지 않아서 몰랐는데, 2+1 과 1+2를 다르게 여겼다.

그래서 itertools의 permutations을 사용하려고 했는데 안타깝게도 NeetCode는 itertools을 사용할 수 없게 해서 다른 방법을 써야했다.

 

[최종 코드]

from itertools import permutations

class Solution:
    def climbStairs(self, n: int) -> int:
        if n <= 3:
            return n
        
        n1, n2 = 2, 3
        
        for i in range(4, n+1):
            temp = n1 + n2
            n1 = n2
            n2 = temp

        return n2

 

생각해보니까 이전(n-1)의 결과에 1을 더한 수, 그리고 그 전(n-2) 수에 2를 더한 수가 바로 현재 n 이었다.

고로 n을 만드는 방법은 n-1와 n-2의 방법의 수를 구하기만 하면 된다는 사실을 발견했다!!

피보나치와 같다고 생각하면 된다!

(이런 패턴을 찾아내는 힘을 다시 길러야 겠다.. 허허 바로 생각해냈어야 했는데 코테 안푼지 오래됐어 뇌가 굳은듯)

 

시간 복잡도

n <= 3 일 경우 O(1)

n >3 일 경우 O(n)

 

'Algorithm > NeetCode' 카테고리의 다른 글

[NeetCode/Python] Min Cost Climbing Stairs  (0) 2024.09.19
[NeetCode/Python] Kth Largest Integer in a Stream  (0) 2024.09.03
[NeetCode/Python] Two Integer Sum  (0) 2024.08.31
[NeetCode/Python] Plus One  (2) 2024.08.30
[NeetCode/Python] Find Target in Rotated Sorted Array  (1) 2024.08.08
'Algorithm/NeetCode' 카테고리의 다른 글
  • [NeetCode/Python] Kth Largest Integer in a Stream
  • [NeetCode/Python] Two Integer Sum
  • [NeetCode/Python] Plus One
  • [NeetCode/Python] Find Target in Rotated Sorted Array
빵빵0
빵빵0
(아직은) 공부하고 정리하는 블로그입니다.
빵빵0
Hack Your World
빵빵0
전체
오늘
어제
  • 분류 전체보기 (69)
    • Error Handling (3)
    • Project (1)
    • Computer Science (4)
      • Data Structure (2)
      • Database (1)
      • Cloud (0)
      • OS (0)
      • Infra, Network (1)
      • AI (0)
    • Language (3)
      • Go (3)
      • Rust (0)
      • Python (0)
      • Java (0)
    • Algorithm (39)
      • BaekJoon (18)
      • Programmers (7)
      • LeetCode (6)
      • NeetCode (8)
    • SW Books (9)
      • gRPC Up & Running (1)
      • System Design Interview (2)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (6)
      • 블록체인 해설서 (0)
      • 후니의 쉽게 쓴 CISCO 네트워킹 (0)
    • Own (2)
      • Personal (0)
      • Novel (0)
      • Comics & Animation (0)
      • Memo (2)
    • BlockChain (4)
      • Issues (0)
      • Research (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • NeetCode
  • 2024
  • go 에러
  • two pointer
  • Greedy
  • Palindrome
  • golang
  • go 데이터
  • ohlcv
  • BEAKJOON
  • KBW
  • 스택
  • decimal
  • 블록체인
  • Python
  • Hash Table
  • 큐
  • candlechart
  • MongoDB
  • go 버그
  • go
  • 프로그래머스
  • LeetCode
  • 그리디
  • BaekJoon
  • Programmers
  • BFS
  • DP
  • 해시

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
빵빵0
[NeetCode/Python] Climbing Stairs
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.