문제읽고 진짠지 급 궁금해져서 명령프롬프트에 dir Unti?????.ipynb를 입력해봤읍니다. 진실이었던걸로...
문제를 한마디로 요약해보면 "같은 길이의 문자열을 n개 입력받아서 문자열들의 공통부분은 문자 그대로 출력하고 다른부분은 ?로 출력하라"는 겁니다.
크게 어려울건 없지만 고려해야하는 사항 한가지만 짚고 넘어갑시다. 문자열을 n개 입력받았을때 비교를 어떻게할까? 입니다. 비교만 잘된다면 공통부분은 글자그대로, 다른부분은 ?로 리스트에 넣어버리면 끝나겠죠.
입력받는 문자열의 길이는 모두 같으므로 어떤 한 문자열을 기준으로 나머지문자열들을 계속 비교해주는 방식도 괜찮을거같네요.
코드작성전 논리구조를 생각해봅시다.
만약 기준을 첫번째로 입력받은 문자열로 설정한다면, 첫번째로 입력받은 문자열과, 나머지 계속 입력받는 문자열들을 입력받는즉시 비교합니다. 첫번째 문자열은 리스트로 받아서 i번째 요소와, 입력받은 문자열의 i번째 문자를 비교해줍니다. 일치한다면 pass, 불일치한다면 리스트의 i번째 요소를 ?로 바꿔줍니다. 요소를 원활히 바꿔주기위해 리스트로 받는것이죠. 이렇게 두번째 문자열을 입력받아 처리했다면 1st-iteration 종료입니다. 이 과정을 n-1번만큼 반복해줍시다. 세번째 문자열을 입력받는다면, 1st-iteration에서 업데이트된 리스트랑 비교하며 같은과정을 진행해줍시다.
n=int(input())
string=list(str(input()))
ans=str()
for _ in range(n-1):
new_string = str(input())
for i in range(len(string)):
if string[i]==new_string[i]:
pass
else:
string[i]='?'
for k in range(len(string)):
ans+=string[k]
print(ans)
구현해본 코드입니다. 첫번째 문자열은 리스트로 받습니다. 저렇게 받으면 어떻게 저장될까요?
string=list(input())
print(string)
문자열을 입력했을때 문자열 자체가 리스트의 한 요소로 묶이는게 아닌, 글자 하나하나를 분할해 리스트에 저장합니다.
계속 코드를 읽어보죠. ans는 답을 리스트가 아닌 문자열로 출력해야하므로 나중에 리스트 요소를 모두 더하기위해 지정해준 빈 문자열입니다.
for문으로 n-1개만큼의 나머지 문자열들을 받아주고 아래 for문으론 리스트와 방금 막 입력받은 따끈따끈한 문자열을 비교해줍니다. 글자별로 비교해서 일치한다면 그냥 pass. 일치하지 않는다면 리스트의 해당 위치를 ?로 바꿔줍시다.
이 과정이 끝나면 마지막 for문에선 리스트레 저장된 문자들을 조합해 문자열을 만들어줍니다.
외전) for문의 동작에 대해..
마지막에 ans로 문자열을 생성하는 for문에서 어차피 for문의 head가 같으므로 그냥 바로위에있는 비교하는 for문에 넣어버리면 안되나? 싶지만..
n=int(input())
string=list(str(input()))
ans=str()
for _ in range(n-1):
new_string = str(input())
for i in range(len(string)):
if string[i]==new_string[i]:
pass
else:
string[i]='?'
ans+=string[i]
print(ans)
그니까 이렇게 하믄 안되나...? 싶지만 (어차피 젤 위에 for문은 범위가 다르므로 불가하지만..) 그 결과는
요래되네요~ 독립적인 for문을 따로쓴게 뭔가 맘에 안들지만 만약 위에 for문에 넣을경우 1 iteration에서 한개의 문자열과 비교해 나온 리스트의 결과를 계~속 누적해서 더해버립니다. for문과 같이 동작을하니 모든 문자열에 대해 다 더해버리는거죠. 그렇기에 리스트를 업데이트하는 동작과는 분리시켜야하는겁니다. 최종적으로 업데이트된 리스트에서 문자열을 한개 생성하면 되는거지요.
열심히 풀어보겠읍니다 Adios.
'💻 Computer Science > Algorithm🐇' 카테고리의 다른 글
[python] 백준 1024 : 수열의 합 (0) | 2024.02.20 |
---|---|
[python] 백준 1064 : 평행사변형 (0) | 2024.02.16 |
[python] 백준 1049 : 기타줄 (1) | 2024.02.12 |
[python] 백준 1009 : 분산처리 (0) | 2024.02.08 |
[C/C++] 백준 2739 : 구구단 (0) | 2024.02.06 |