참고: https://www.acmicpc.net/problem/1235
✔️ 문제
문제는 다음과 같다.
✔️ 풀이
예제를 보게 되면, 두 자리로 자르게 되었을 때 45가 2개이므로
최소 맨 뒤에서 세 개의 자리로 잘라야 모두 다른 번호가 된다.
그래서 출력값이 3인 것을 확인할 수 있다.
그래서 생각한 방법은 반복문을 돌면서 한 자리씩 자르고,
해당 값이 모두 같으면 두 자리, 같으면 세 자리 이런식으로
자릿 수를 증가시키는 형태로 코드를 구현해보았다.
그리고 나서 자른 값을 중복 제거한 길이(set)와
기존 입력으로 받은 배열의 길이와 같으면 반복문을 탈출하면 된다.
import sys
input = sys.stdin.readline
n = int(input())
rs = [str(input().rstrip()) for _ in range(n)]
cnt = 0
while True:
if len(rs[0]) == cnt:
print(cnt)
break
new_rs = set()
for i in rs:
new_rs.add(i[len(i)-cnt:])
if len(rs) == len(new_rs):
print(cnt)
break
else:
cnt += 1
코드가 깔끔하지는 않는데, 우선 하나씩 살펴보게 되면
풀이했던 것처럼 반복문을 돌면서 딕셔너리에 추가한 길이와 일치하면
k 값을 출력하면서 탈출하게 했고 그게 아니면 자릿수를 늘리기 위해 1을 더해준다.
그 외에 탈출 조건으로는 모두 자릿수가 같은 입력이기 때문에
가장 처음 문자열의 길이와 cnt가 같으면 무한루프를 돌 수 있어서
바로 자릿수를 출력하고 탈출하도록 만들어준다.
화이팅 💪
'알고리즘(algo) > 백준' 카테고리의 다른 글
[백준] 1676번 - 팩토리얼 0의 개수 (0) | 2023.03.18 |
---|---|
[백준] 1743번 - 음식물 피하기 (0) | 2023.03.16 |
[백준] 1543번 - 문서 검색 (0) | 2023.03.15 |
[백준] 11656번 - 접미사 배열 (0) | 2023.03.14 |
[백준] 1026번 - 보물 (0) | 2023.03.12 |