-
2866. [Python]문자열 잘라내기Python_알고리즘/Gold V 2024. 8. 19. 18:17
1. 문제
https://www.acmicpc.net/problem/2866
2. 접근 방법
- 시간 제한: 1초
- 메모리 제한: 256MB
- 정렬
3. 파이썬 코드
import sys input = sys.stdin.readline # 행, 열 길이 R, C = map(int,input().split()) # 문자열 받아옴 words = [ list(map(str,input().strip())) for _ in range(R) ] # 문자 역순으로 저장 new_words = [] # 아래서부터 문자열을 저장 for j in range(C): ans = "" for i in range(R-1,-1,-1): ans += words[i][j] new_words.append(ans) # 문자열 정렬 new_words.sort() # 최종 최대 공통되는 부분 길이 체크 max_index = 0 # 행 길이 만큼 반복 for i in range(1,C): # 초기 인덱스값 설정 index = 0 # 0번 인덱스부터 앞뒤 비교해가며 값이 같은경우 if new_words[i-1][index] == new_words[i][index]: # 어디까지 공통된 부분인지 체크하는 while 선언 while new_words[i-1][index] == new_words[i][index]: # index 값 1 씩 증가 index += 1 # 최고 index 값 갱신 if max_index < index: max_index = index # 아래서부터 max_index 값을 찾았기 때문에 열의 길이에서 max_index 값에 인덱스 값계산을 한 1을 더해서 정답 출력 print(R - max_index - 1)
4. 문제를 풀고난 후 생각
- 입력으로 들어온 문자열을 제일 끝 문자열부터 더해가며 저장한다.
alfa beta zeta
- 위의 예시의 경우 "aaa", "zba", "eel", "ttf" 의 문자를 새로운 리스트에 저장을 한다.
- 이후 정렬을 통해서 "aaa", "eel", "ttf", "zba" 로 정렬을 해준후 1번 인덱스 부터 비교를 시작한다.
- 위 두 문자를 비교해서 같은 경우 index 값을 1씩 증가시켜가며 다음 문자를 비교한다.
- 문자가 같다는 가정하에 다음 문자를 비교하는 방식을 예시를 들었다. 이렇게 비교해가며 다른 문자가 나온 경우 나왔을때 index 값을 비교해 최대 index를 저장해준다.
- index 값이 열의 끝까지 도달시킨 후 저장시킨 최대 인덱스 + 1 한 값을 행의 개수에서 제외시켜주면 된다.
5. 문제를 푸는데 도움이 되는 지식
- 정렬
'Python_알고리즘 > Gold V' 카테고리의 다른 글
2293. [Python]동전 1 (0) 2024.09.05 6581. [Python]HTML (0) 2024.08.26 2866. [Python]문자열 잘라내기 (0) 2024.08.13 14891. [Python]톱니바퀴 (0) 2024.08.07 2589. [Python]보물섬 (0) 2024.08.06