2주 간의 긴 여행과 휴식기를 지나고 거진 한 달만에 하는 코딩이라 그런지 감을 많이 잃은 것 같다.
그런 김에 이번주는 solved.ac의 브론즈 2~실버3까지의 문제를 매일매일 풀어주면서 감을 찾아보려고 한다.
1. 처음에 틀린 풀이
num = int(input())
list1 = []
for _ in range(num):
word = input()
list1.append(word)
ans = list1[0]
print(list1)
for i in range(len(list1)-1):
for j in range(len(ans)):
if ans[j] != list1[i+1][j]:
fin = ans.replace(ans[j], '?')
print(fin)
"""
ans = 'acd'
ans[1] = 'v'
print(ans)"""
"""
ans = 'acd'
anss = ans.replace(ans[1], 'v')
print(anss)"""
문자열을 비교하고 나서 문자열 자체를 수정하려 했기에 문제가 발생했다.
[python] 파이썬 문자열 중 한 문자 바꾸기
- 파이썬 문자열의 index로 접근하여 문자 바꾸기 파이썬을 사용하다보면 문자열의 특정 문자를 바꾸고 싶은 경우가 있습니다. 그런 경우 다음과 같은 코드를 사용하여 문자를 바꾼다면 오류가
gbjeong96.tistory.com
Deep copy, Shallow copy
그래프 알고리즘을 공부하던 도중 블로그 설명 중간에 있던 deep copy와 shallow copy의 보다 명확한 이해를 위해 글을 작성한다. copy에 대해 이해하기 전에 그보다 더 기본 배경이 되는 mutable과 immutab
drongdrong.tistory.com
위의 두 블로그를 참고해보자.
mutable은 값이 변할 수 있는, immutable은 반대로 값이 변할 수 없다는 의미를 가지고 있다.
mutable에는 list,dict,set이 있고, immutable 변수에는 정수(int), 문자열(str)과 tuple 등이 있다.
문자열은 immutable하기 때문에 문자열을 수정하려 했던 내 코드는 에러가 나타날 수 밖에 없었다.
2. 정답 풀이
num = int(input())
co_word = input()
list1 = []
for i in co_word:
list1.append(i)
for _ in range(num-1):
word = input()
for i in range(len(co_word)):
if word[i] != list1[i]:
list1[i] = '?'
print(''.join(list1))
나는 for 문을 통해 처음에 입력받은 숫자만큼 반복문을 돌리는 것이 아니라 비교되는 첫번째 단어는 따로 빼서 list로 만들어주었다. list는 mutable하고 잘 다룰 수 있는 데이터형이라 문제를 생각보다 쉽게 해결할 수 있었다.
3. 리스트의 요소를 공백없이 모두 출력
이부분이 생각보다 자주 나오는데 맨날 어떻게 했는지 대충만 기억나서 정리해두려 한다.
print(''.join(list1))
# join함수를 쓸 때의 주의할 점은 join함수는 int요소는 출력이 불가능하다는 것이다!
print(*list1, sep='')
# 애스터리스크(*)을 list 이름 앞에다 두고 sep=''을 이용하면 공백없이 요소들을 출력할 수 있다.
날이 갈수록 슬슬 코딩 감 돌아오는 듯..??
'자료구조,알고리즘(Python) > 백준' 카테고리의 다른 글
백준 200문제 돌파! (0) | 2024.11.28 |
---|---|
단어 공부:1157(Python) (3) | 2024.10.26 |
1547 : 공[Python] (4) | 2024.10.13 |
11582 : 치킨 TOP N (Python) (0) | 2024.09.10 |
11663 : 선분 위의 점(Python) (1) | 2024.09.07 |