[Python] 백준 16888 루트 게임

2021. 10. 28. 21:33·CS/알고리즘 & 문제풀이

문제 링크 : https://www.acmicpc.net/problem/16888

 

16888번: 루트 게임

첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 105)가 주어진다. 둘째 줄부터 T개의 줄에 테스트 케이스가 한 줄에 하나씩 주어지며, N(1 ≤ N ≤ 106)이 주어진다.

www.acmicpc.net

1. 접근 방법

소수 판정 에라토스테네스 체와 비슷한 방식으로 해결될 것이라 생각이 들었다.

처음에는 각 조건마다 다음 턴을 거꾸로 탐색하는 과정을 반복했는데, 시간이 생각보다 많이 걸려서, 에라토스테네스 체에서도 사용하는 아이디어인, 소수를 발견하면 배수를 모두 소수가 아님을 표시하는 방법을 채용하여 해결했다.

 

 

2. 풀이 코드

🖥python코드

import sys
input = sys.stdin.readline


dp = [False] * (10 ** 6 + 1)

# 제곱수 먼저 확인
for i in range(1, 10 ** 3 + 1):
    dp[i * i] = True

# 나머지 확인
for i in range(2, 10 ** 6 + 1):
    if not dp[i]:
        # 제곱수를 더하면서 True로 바꿔주기
        for s in range(1, 10 ** 3 + 1):
            if i + s * s >= 10 ** 6:
                break
            dp[i + s * s] = True

for _ in range(int(input())):
    if dp[int(input())]:
        print('koosaga')
    else:
        print('cubelover')

📕코드 해설

각 시작숫자에 일 때 이길 수 있는지 확인하는 dp리스트를 만들었다. True일 때, 해당 숫자로 시작하면 이길 수 있다.

우선, 10 ^ 3까지 확인하면서 각각의 제곱수는 한번에 0으로 만들 수 있으므로 True로 바꿔주었다.

다음, 2부터 10 ^ 6까지 확인하면서 False일 때, 제곱수를 더한 숫자를 모두 True로 바꿨다.

 

https://stackoverflow.com/questions/51625314/why-vv-is-faster-than-v2-in-python/51625533

 

Why v*v is faster than v**2 in python

I tried to measure the performance between v*v and v**2. And the result was just like below # test was generated with randint(1, 999) # 0.10778516498976387 print(timeit.timeit("sum([item*item for...

stackoverflow.com

**을 사용하면 함수호출이 발생해서 두 수를 곱해서 처리하는 것보다 느리다.

이 문제에서도 ** 대신 두 수를 곱하는 방식으로 해결하면 조금 더 시간 단축이 가능하다.

 

 

3. 생각 정리

**이 함수호출로 해결되는 것은 기본일 수도 있지만, 떠올리지 못한 게 아쉬움이 남으면서, 많이 부족하다고 느낀 계기도 되었다.

이런 단순하지만, 시간적 제한이 강한 문제일수록 단순함을 잘 추구해야하는 한다고 생각하게 되는 문제였다.

 

'CS > 알고리즘 & 문제풀이' 카테고리의 다른 글

[Python] 백준 23257 비트코인은 신이고 나는 무적이다  (0) 2021.10.30
[Python] 백준 22234 가희와 은행  (0) 2021.10.28
[Python] 백준 3109 빵집  (0) 2021.10.28
[Python] 백준 1461 도서관  (0) 2021.10.27
[Python] 백준 20056 마법사 상어와 파이어볼  (0) 2021.10.25
'CS/알고리즘 & 문제풀이' 카테고리의 다른 글
  • [Python] 백준 23257 비트코인은 신이고 나는 무적이다
  • [Python] 백준 22234 가희와 은행
  • [Python] 백준 3109 빵집
  • [Python] 백준 1461 도서관
mintropy
mintropy
민트로피의 하루하루 오늘보다 더 나은 내일
  • mintropy
    민트로피의 민트초코
    mintropy
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 생각 정리
        • 코딩테스트
        • SSAFY
      • 디지털 노트
        • Obsidian.md
        • Notion
      • CS
        • 알고리즘 & 문제풀이
        • AI
        • DB
        • 디자인패턴
      • Projects
      • Python
        • Python Web Framework
      • JavaScript
        • React.js
      • Docker
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    django
    알고리즘
    카카오
    프로그래머스
    백준
    파이썬
    fastapi
    프로젝트
    DP
    pydantic
    Python
    trie
    DRF
    구현
    project_zero
    bfs
    web framework
    markdown
    회고
    브루트포스
    union-find
    SSAFY
    Combinatorics
    dfs
    코딩테스트
    게임이론
    그리디
    조건분기
    ps
    line
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
mintropy
[Python] 백준 16888 루트 게임
상단으로

티스토리툴바