728x90
https://www.acmicpc.net/problem/4821
22/09/29
문자열 파싱 문제로, 난이도에 비해서 의외로 실수할 만한 부분이 곳곳에 분포해있었다.
문제 접근 방식:
이 문제를 2번 틀렸었는데, 문제에서 주어진 "만약, low > high인 경우에는 이 범위는 인쇄하지 않는다."라는 조건을 잘못 해석하여 이 범위를 영구적으로, 혹은 일시적으로 빼도록 구현을 해서 틀렸었다.
알고 보니, 그냥 저 경우일 때는 무시를 하면 된다는 뜻이었다.
구현 방법은, 배열을 선언하고 배열의 인덱스가 페이지를 의미하는 것으로 구현을 했다.(마치 에라토스테네스의 체와 같은 방식이다.)
배열의 인덱스가 페이지, 그 인덱스에서의 값이 그 페이지를 인쇄할지 인쇄하지 않을지의 여부를 알려주는 숫자(0 또는 1)이다.
구현을 할 때, 페이지 범위를 넘어가는 때에는 인쇄하지 않는다고 했으므로, IndexError 예외처리를 통해 구현해주었다.
이후 몇 페이지를 출력할지는 그냥 sum함수를 이용하여 배열의 합을 계산함으로써 구현했다.
아래는 내가 위의 접근 방식과 같이 작성한 파이썬 코드이다. 더보기를 누르면 확인할 수 있다.
더보기
# 4821번 페이지 세기
# 구현, 문자열, 파싱
'''
접근 방법:
페이지를 배열로 선언하고, 이 페이지를 인쇄할지는 1, 아니라면 0으로 저장한다.
인덱스는 페이지를 뜻한다.
'''
while True:
N = int(input())
if N == 0:
break
pages = [0 for _ in range(N+1)]
string = input().split(',')
for page in string:
if '-' not in page:
start, end = int(page), int(page)
else:
start, end = map(int, page.split('-'))
if start > end:
continue
else:
for i in range(start, end+1):
try:
pages[i] = 1
except IndexError:
continue
print(sum(pages))
'알고리즘 > 백준 문제 풀이' 카테고리의 다른 글
[Python] 20040번 사이클 게임 (0) | 2022.10.25 |
---|---|
[Python] 7569번 토마토 (0) | 2022.10.24 |
[Python] 25640번 MBTI (0) | 2022.10.24 |
[Python] 11277번 2-SAT - 1 / 11278번 2-SAT - 2 (0) | 2022.10.24 |
[Text] 22311번 Maze 6 (0) | 2022.10.24 |