본문 바로가기
ALGORITHM/백준

[BOJ/PYTHON] 2866. 문자열 잘라내기

by 뭉망뭉 2023. 6. 1.

백준 문제 링크: https://www.acmicpc.net/problem/2866

문제 요약

테이블을 세로로 읽어 문자열 만들 수 있음

가장 위 행 지워도 열에서 중복 문자열 없으면 가장 위 행 지워주고 카운트 1 증가 중복 문자열 있으면 카운트 출력 후 종료

핵심 아이디어

세로로 읽은 문자열 리스트를 먼저 만들어준다.

그 문자열 리스트에서 일단 가장 위 행을 지워주고, 중복 문자 체크를 한다. set으로 중복 제거한 것의 개수랑 중복 제거 안 한 것의 개수가 같다면 중복이 존재한다는 말이기 때문에 카운트를 출력하고 종료한다.

아닐 경우 카운트를 증가시켜주면 된다.

문제에서는 행 지워도 문제 없으면 → 지우기 인데, 일단 지우고 중복 여부를 확인하는 것이 구현 상으로도 편리하고 별도의 문제도 없다.

풀이

# gold5-2866. 문자열 잘라내기

import sys
input = sys.stdin.readline

r, c = map(int, input().split()) # 테이블 행, 열 개수
table = [list(map(str, input().rstrip())) for _ in range(r)] 
count = 0
string_list = []    

# 세로로 읽어 문자열 만듦
for j in range(c):
    string = ""
    for i in range(r):
        string += table[i][j]
    string_list.append(string)

for _ in range(r): 
    # 가장 위 행 지워줌
    for num in range(c):
        string_list[num] = string_list[num][1:]
    # 중복 제거한 거랑 안 한 거랑 개수가 다르면 중복이 있는 것
    if (len(set(string_list)) != len(string_list)):
        print(count)
        exit()
    else: count += 1
print(count)

실행 시간

메모리 40204KB, 시간 712ms (python3)

댓글