파이썬 백준 1032번
브론즈 1
https://www.acmicpc.net/problem/1032
문제 보기
분류: 구현, 문자열
문제 풀기
출력된 결과들의 알파벳을 나누어 2 차원 리스트에 저장을 하고 세로로 모두 같은 문자인지 판단을 한다.
이때 for loop 을 이용하는 방법 보다는 column 형태로 새롭게 묶어고 함수 set() 을 통해 중복 제거를 통해 판단하기로 하였다. 2 차원 리스트를 column 으로 새롭게 묶는게 문제였는데 검색을 통해 zip() 함수를 찾게 되었다. 정말 정말 유용하게 사용할 것 같다.
column 의 요소들을 튜플 형태로 새롭게 묶고 set() 을 이용하여 중복을 제거한다. 이때, 중복된 결과를 모두 제거하고 남은 원소의 개수가 1 이면 그 column 의 원소들은 모두 같음을 말한다.
이를 통해 command 의 각 자리에 누적해 나가면서 알파벳을 추가할지 "?" 를 추가할지 판단할 수 있다.
코드 보기
import sys
inputdata = sys.stdin.readline
def fnFindCommand():
character_ls = list(zip(*file_ls)) # 2 차원 리스트에서 세로방향의 요소들을 다시 묶음. (같은 알파벳인지 아닌지 확인하기 위한.)
print(character_ls) ## TEST PRINT
command_str = "" # 찾고자 하는 명령어를 집어 넣을 빈 공간 생성.
for ch in character_ls: # 동일한 순서 위치에 있는 알파벳끼리 묶여진 리스트를 하나씩 뽑음.
if len(set(ch)) == 1: # 중복되는 문자를 set() 으로 없애고 그 길이가 1 이면 모두 같은 문자.
command_str += ch[0] # 그 때의 문자를 순차적으로 합침.
else: # len(set(ch)) == 1 이 아니라면 2 개 이상의 다른 문자가 섞여 있음.
command_str += "?" # 서로 다른 문자가 존재하면 "?" 를 합침.
return command_str
if __name__ == "__main__":
files = int(inputdata().strip())
file_ls = [list(map(str, inputdata().strip())) for _ in range (files)]
print(file_ls) ## TEST PRINT
result = fnFindCommand()
print(result)
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 10821 - 정수의 개수 (0) | 2023.02.13 |
---|---|
[Java] 백준 풀기 10987 - 모음의 개수 (0) | 2023.02.12 |
[Java] 백준 풀기 2576 - 홀수 (0) | 2023.02.10 |
[Java] 백준 풀기 4101 - 크냐? (0) | 2023.02.08 |
[Java] 백준 풀기 10797 - 10부제 (0) | 2023.02.07 |