www.acmicpc.net/problem/11721 (level: Bronze II)
진짜 오랜만에 알고리즘 문제를 풀어봤다. (서로가 서로에게 희망이 되어주기 위해서^_^)
올해 초에 갤탭을 구입했으므로 앞으로는 갤탭을 잘 활용해볼 예정이다.
간단한 문제지만 이런 문제들부터 논리적으로 생각하는 연습을 하는게 중요하다고 생각해서 제대로 단계를 나눠서 틀을 짜봤다.
tmi :) index 쪽에 빨간색으로 덧씌워서 적은 메모는 처음엔 i=1, i=2로 적었다가 문제를 풀고난 후 i=0부터라는 것을 강조하기 위해 수정해봤다.
핵심은
1. 들어오는 input의 길이를 알아낼 것
2. 문제에서 주어진 10이라는 수를 기준으로 다르게 처리해줄 것
# date: 2021/04/20
# author: psS2mj
# brief: BOJ_11721_열 개씩 끊어 출력하기
import sys
input = sys.stdin.readline()
len = len(input)
if len < 10:
print(input)
else:
len = len//10
for i in range(len):
print(input[i*10:i*10+10])
print(input[len*10:])
솔직히 입출력부터 다 까먹어서 실제 구현하는 데는 애 좀 먹었다.
한동안 파이썬으로 알고리즘 문제 풀었을 때보다 코드가 지저분 할 수도 있으나 오늘은 이게 최선~^_^
10 미만이면 바로 출력하고 끝나도록 했고,
10 이상일 때는 처음에 알아낸 길이를 이용해 for문을 몇 번 돌릴지 정해주고 (나누기, 몫을 이용) 돌만큼 돌았으면 나머지는 그냥 평범하게 출력해주면 끝.
처음엔 틀렸었는데, 그 이유는 내가 for문 안에서 문자열 슬라이싱을 할 때 [A:B]의 범위가 B를 포함한다고 착각하고 코드를 짰기 때문이었다. 즉, i*10+9로 구현을 했었고, 틀렸고, 출력을 다시 자세히 살펴보니 틀린 부분 1초컷으로 찾아낼 수 있었고, i*10+10로 고쳤고, 다시 제출했고, 맞혔다.
오랜만이라 헷갈릴 법도 했다.
그럼 앞으로 ㅍㅇㅌ
(+) 4/23 추가
# date: 2021/04/20
# author: psS2mj
# brief: BOJ_11721_열 개씩 끊어 출력하기
import sys
input = sys.stdin.readline()
len = len(input)//10
for i in range(len):
print(input[i*10:i*10+10])
print(input[len*10:])
오랜만에 알고리즘 한 문제 풀었다는 것에 의의를 두려고 했으나, 막상 풀고 보니 기존에 len이 10 이상인지 아닌지 따져서 if와 else로 나눠 각각 로직을 수행하도록 한 것이 비효율적으로 느껴졌다.
그리고 오늘 다른 문제 풀다가 겸사겸사 이 문제 코드도 조금 더 세련되게 리팩토링(?) 해봤다.
어차피 len을 나눈 몫을 이용한다면 길이가 10 미만일 때 0이니까 else에 있는 로직을 그대로 써도 되겠다 싶어 조건문을 저기 어디 갖다 치우고 입력된 문자열의 길이를 구하면서 동시에 그 길이를 10으로 나눈 몫을 구해 아래 로직에서 활용하였다. - 끝 -
'🥇Problem Solving (psS2mj) > BOJ' 카테고리의 다른 글
[BOJ] 11399. ATM (Python3) (0) | 2021.04.23 |
---|---|
[BOJ] 11047. 동전 0 (Python3) (0) | 2021.04.23 |
[BOJ] 5543. 상근날드 (Python3) (0) | 2020.09.12 |
[BOJ] 3052. 나머지 (Python3) (0) | 2020.09.04 |
[BOJ] 2588. 곱셈 (Python3) (0) | 2020.09.01 |
댓글