반응형
2154번: 수 이어 쓰기 3 (acmicpc.net)
풀이
- 1부터 100,000까지의 수를 이어 붙이고 그 문자열 중에서 특정 숫자가 몇 번째에 나오는지 찾는 문제이다.
- 파이썬이 find() 나 index()를 통해 문자열에서 특정 문자의 위치를 찾는 것이 편하므로 코드가 짧을 것 같아 숏코딩에 도전하였다.
- 처음 든 생각은 for문으로 1부터 100,000까지 모든 수를 문자열에 이어 붙이고 그 문자열에서 find를 사용하는 것이었다.
- 위의 방법은 65B 로 숏코딩 1등을 위해서는 더 짧아야 했다.
- 두 번째로는 어차피 n의 범위가 100,000 까지 이므로 for문 안에서 100,000이라는 수의 길이를 줄여보려 하였다.
- 100,000 = (10**5)+1 이고 11**5가 100,000의 범위를 포함하므로 for문에서의 100,000을 11**5로 바꾸는 것으로 코드를 더 줄여보았다.
- 세 번째로는 문자열 자체를 만드는 부분에서 코드를 줄여야겠다고 생각해 문자열 합치기에 자주 사용되는 join 함수를 사용해보았다.
- 위의 아이디어를 종합하여 총 코드 길이 55B로 숏코딩 1등을 달성하였다.
#숏코딩-파이썬
#백준 2154번 - 수 이어 쓰기 3
#1번 코드 - 길이 : 65B
#for문으로 1 부터 100,001 까지 모든 수를 문자열에 이어 붙이고 그 문자열에서 find를 사용하기
a=""
for i in range(1,100001): a+=str(i)
print(a.find(input())+1)
#2번 코드 - 길이 : 64B
#11**5가 100,000의 범위를 포함하므로 for문에서의 100,000 을 11**5로 바꾸는 것
a=""
for i in range(1,11**5): a+=str(i)
print(a.find(input())+1)
#3번 코드 - 길이 : 55B
#문자열 생성 부분의 코드를 줄이기 위해 join함수 사용
print(''.join(map(str,range(1,11**5))).find(input())+1)
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 2115번 : 갤러리 (0) | 2021.10.14 |
---|---|
알고리즘 - Python / 백준 - 1715번 : 카드 정렬하기 (0) | 2021.10.14 |
알고리즘 - Python / 백준 - 1240번 : 노드사이의 거리 (0) | 2021.10.10 |
알고리즘/숏코딩 - Python / 백준 - 22396번 : カレー作り (0) | 2021.10.10 |
알고리즘 - Python / 백준 - 1068번 : 트리 (0) | 2021.10.07 |