티스토리 뷰
반응형
문제
문제 상황
- 반복적인 연산을 통해 수열을 만들고 겹치는 부분이 발생했을 때 겹치지 않는 부분의 길이를 구하는 문제
해결 전략
- 연산을 반복하면서 조건을 설정해 해당 조건이 아니면 수열에 추가하고, 맞으면 반복을 탈출하며 그 반복 요소의 위치를 찾는다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
from sys import stdin
input = stdin.readline
A, P = input().split()
D = [A]
while True:
A = D[-1]
total = 0
for i in range(len(A)):
total += (int(A[i])**int(P)) # 각자리를 P제곱하여 더해준다
if str(total) not in D:
D.append(str(total))
else :
print(D.index(str(total)))
break
|
cs |
해설
- 리스트의 마지막 요소를 연산에 활용하여 조건을 찾고, 요소에 이미 존재하는지 여부를 판단한다. 연산에 소요되는 시간이 O(N)이고, 리스트에 요소가 존재하는지 확인하는데 소요되는 시간이 O(M)이 된다. 이것이 while문으로 감싸져 있어 약 O(N^2)의 시간으로 예상된다.
새로 학습한 것 & 실수
- 처음에 반복 요소가 발견되면 그 때까지 나온 요소들의 개수를 구하였는데 문제의 조건은 반복되지 않는 부분의 길이를 구하는 것이므로 그 요소의 위치를 찾아 출력하면 된다.
반응형
'알고리즘 학습 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 - 섬의 개수 (4963) [Python] (0) | 2020.10.07 |
---|---|
백준 알고리즘 - 텀 프로젝트 (9466) [Python] (0) | 2020.10.07 |
백준 알고리즘 - 순열 사이클 (10451) [Python] (0) | 2020.10.06 |
백준 알고리즘 - 제곱수의 합 (1699) [Python] (0) | 2020.09.21 |
백준 알고리즘 - 연속합 (1912) [Python] (0) | 2020.09.21 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- django
- 순열사이클#BOJ#Python
- 종이자르기#분할정복#BOJ#Python
- 리모컨#완전탐색#BOJ#Python
- 암호코드#dp#BOJ#Python
- Brackets#Stacks and Queues#Codility#Python
- PassingCars#Codility#Python
- Distinct#Codility#Python
- 터틀비치#리콘#xbox#controller
- 나무자르기#BOJ#이분탐색#Python
- API#lazy#
- 공유기 설치#BOJ#이분탐색#Python
- 랜선자르기#이분탐색#BOJ#Python
- Triangle#Sorting#Codility#Python
- 반복수열#백준알고리즘#Python
- 배열합치기#분할정복#BOJ#Python
- Swift#Tuples#Range
- N으로 표현#DP#Programmers#Python
- 백준 알고리즘#BackTracking
- 쿼드트리#BOJ#분할정복#Python
- 파이썬알고리즘인터뷰#4장
- 병든 나이트#BOJ#탐욕법#Python
- filter#isalnum#lower
- 토마토#백준알고리즘#Python
- django#slicing
- NumberofDiscIntersections#Codility#Sort#Python
- 텀 프로젝트#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- 섬의개수#백준알고리즘#Python
- 날짜 계산#BOJ#완전탐색#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함