Python_알고리즘/Gold V

2866. [Python]문자열 잘라내기

최근영 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. 문제를 푸는데 도움이 되는 지식

 

  • 정렬