danuri
오늘의 기록
danuri
전체 방문자
오늘
어제
  • 오늘의 기록 (307)
    • java (150)
      • java (33)
      • spring (63)
      • jpa (36)
      • querydsl (7)
      • intelliJ (9)
    • kotlin (8)
    • python (24)
      • python (10)
      • data analysis (13)
      • crawling (1)
    • ddd (2)
    • chatgpt (2)
    • algorithm (33)
      • theory (9)
      • problems (23)
    • http (8)
    • git (8)
    • database (5)
    • aws (12)
    • devops (10)
      • docker (6)
      • cicd (4)
    • book (44)
      • clean code (9)
      • 도메인 주도 개발 시작하기 (10)
      • 자바 최적화 (11)
      • 마이크로서비스 패턴 (0)
      • 스프링으로 시작하는 리액티브 프로그래밍 (14)
    • tistory (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 마이크로서비스패턴
  • Database
  • connection
  • CICD
  • Security
  • SWAGGER
  • nuribank
  • docker
  • JPA
  • 도메인 주도 설계
  • S3
  • POSTGIS
  • 자바 최적화
  • 등가속도 운동
  • PostgreSQL
  • Bitmask
  • gitlab
  • Spring
  • reactive
  • Saving Plans
  • DDD
  • mockito
  • 트랜잭션
  • AWS
  • RDS
  • Jackson
  • Java
  • Kotlin
  • Thymeleaf
  • ChatGPT

최근 댓글

최근 글

hELLO · Designed By 정상우.
danuri

오늘의 기록

algorithm/problems

못생긴 수

2021. 2. 4. 23:51

문제

못생긴 수란 오직 2,3,5만을 소인수로 가지는 수를 의미한다. 1은 못생긴 수라고 가정한다. n번째 못생긴 수를 찾아라.

못생긴 수 : {1,2,3,4,5,6,8,9,10,12,15....}

 

입력

n (1 ~ 1,000)

 

출력

n번째 못생긴 수를 출력한다.

 

풀이

n = int(input())

ugly = [0] * n # 못생긴 수를 담기 위한 테이블 (1차원 DP 테이블)
ugly[0] = 1 # 첫 번째 못생긴 수는 1

# 2배, 3배, 5배를 위한 인덱스
i2 = i3 = i5 = 0
# 처음에 곱셈 값을 초기화
next2, next3, next5 = 2, 3, 5

# 1부터 n까지의 못생긴 수들을 찾기
for l in range(1, n):
    # 가능한 곱셈 결과 중에서 가장 작은 수를 선택
    ugly[l] = min(next2, next3, next5)
    # 인덱스에 따라서 곱셈 결과를 증가
    if ugly[l] == next2:
        i2 += 1
        next2 = ugly[i2] * 2
    if ugly[l] == next3:
        i3 += 1
        next3 = ugly[i3] * 3
    if ugly[l] == next5:
        i5 += 1
        next5 = ugly[i5] * 5

# n번째 못생긴 수를 출력
print(ugly[n - 1])

다이나믹 프로그래밍 문제이다.

못생긴 수에 2,3,5를 곱한 수 또한 못생긴 수에 해당한다는 점이 포인트이다.

 

또한, ugly[l] = min(next2, next3, next5) 코드가 핵심인데, 오름차순으로 table을 유지하기 위해 못생긴 수에 2,3,5를 곱한 수 중 작은 수를 그 다음 못생긴 수로 설정해야 한다.

'algorithm > problems' 카테고리의 다른 글

알고리즘 문제 - 볼링공 고르기  (0) 2021.02.16
편집 거리  (0) 2021.02.05
백준 18353 - 병사 배치하기  (0) 2021.02.04
금광  (0) 2021.02.04
프로그래머스 - 가사 검색  (0) 2021.01.27
    'algorithm/problems' 카테고리의 다른 글
    • 알고리즘 문제 - 볼링공 고르기
    • 편집 거리
    • 백준 18353 - 병사 배치하기
    • 금광
    danuri
    danuri
    IT 관련 정보(컴퓨터 지식, 개발)를 꾸준히 기록하는 블로그입니다.

    티스토리툴바