코딩테스트/Python
[python 백준 3107] IPv6
nahkim
2023. 3. 13. 07:33
📜 접근 방법
1. ":"를 기준으로 문자열을 쪼갠다.
2. 쪼갠 문자열을 for문을 돌린다.
3. 빈 문자열일 경우 현재 문자열 갯수만큼 "0000:"을 추가한다.
4. 빈 문자열이 아닐 경우 (4 - s의 갯수)만큼 0을 추가한 후 문자열 s + : 를 추가한다.
❌ 실패 코드
import sys
s_list = sys.stdin.readline().strip().split(":")
res = ""
check = True
for s in s_list:
if s == "":
if check:
if len(s_list) < 8:
for i in range(8 - len(s_list)):
res += "0000:"
check = False
res += "0000:"
else:
if len(s) != 4:
for i in range(4 - len(s)):
res += "0"
res += s
else:
res += s
res += ":"
print(res[:-1])
반례
입력 : 1:2:3:4:5:6:7::
정답 : 0001:0002:0003:0004:0005:0006:0007:0000
출력 : 0001:0002:0003:0004:0005:0006:0007:0000:0000
즉, 1::, :: 을 고려해야한다. 이는 split(":")를 할 경우, 문자열이 3개가 되기 때문이다.
생각해보니 위의 if문은 필요 없고 for문에서 (8 - 쪼갠 문자열 갯수) + 1을 하고, else문으로 바꿔주면 되는 문제였다.
✅ 정답 코드
import sys
s_list = sys.stdin.readline().strip().split(":")
res = ""
check = True
for s in s_list:
if s == "":
if check:
for i in range(8 - len(s_list) + 1):
res += "0000:"
check = False
else:
res += "0000:"
else:
if len(s) != 4:
res += "0" * (4 - len(s))
res += s + ":"
print(res[:-1])
💡알게 된점