백준 문제 링크: 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)
'ALGORITHM > 백준' 카테고리의 다른 글
[BOJ/PYTHON] 14425. 문자열 집합 (0) | 2023.06.01 |
---|---|
[BOJ/PYTHON] 15904. UCPC는 무엇의 약자일까? (0) | 2023.06.01 |
[BOJ/PYTHON] 8892. 팰린드롬 (0) | 2023.06.01 |
[BOJ/PYTHON] 19591. 독특한 계산기 (0) | 2023.06.01 |
[BOJ/PYTHON] 3078. 좋은 친구 (0) | 2023.06.01 |
댓글