해석
먼저 문제를 그림으로 설명하면 이렇다.
이런식으로 해서 남은 플러그를 계산하는 문제이다.
예제 1번은
3개의 멀티탭에
멀티탭 1, 1개 플러그
멀티탭 2, 1개 플러그
멀티탭 3, 1개 플러그
이렇게 있어서 멀티탭 1이 선영이 집의 플러그에 꽂히고
멀티탭 2는 멀티탭 1에 꽂히고
멀티탭 3은 멀티탭 2에 꽂힌다.
그래서 최종으로 남은 플러그 갯수는 1개가 남는다.
2개의 멀티탭에
멀티탭 1, 5개 플러그
멀티탭 2, 8개 플러그도 똑같이
멀티탭 1이 선영이 집 플러그에 꽂히고
멀티탭 2가 멀티탭 1에 꽂히면
멀티탭 1의 남은 플러그들은 4개
멀티탭 2개는 아무것도 꽂히지 않았으니 8개
총 12개이다.
이에 대한 규칙을 정의하면
마지막 멀티탭을 제외한 나머지 멀티탭의 플러그 갯수에 -1빼고 더하면 된다.
즉
3
1-1 +
1-1 +
1
= 1
2
5-1+
8
= 12
이걸 코드로 구현하면 된다.
처음 구현한 코드
n = int(input())
plugs = []
result = 0
for j in range(n):
m = int(input())
plugs.append(m)
for i, plug in enumerate(plugs):
if i == len(plugs)-1:
result += plugs[-1]
else:
result += (plugs[i] - 1)
print(result)
이렇게 했는데, 런타임에러가 나서
enumerate()가 시간을 많이 먹나 싶어서 range로 코드를 바꿨다.
n = int(input())
plugs = []
result = 0
for j in range(n):
m = int(input())
plugs.append(m)
for i in range(len(plugs)):
if i == len(plugs)-1:
result += plugs[-1]
else:
result += (plugs[i] - 1)
print(result)
그래도.. 자꾸 시간초과 문제가 발생한다.
그래서
for문을 2번써서 문젠가 싶어서 코드를 바꿨다.
#멀티탭 갯수
import sys
n = int(sys.stdin.readline().rstrip())
result = 0
for i in range(n):
#멀티탭의 플러그 갯수 m
m = int(sys.stdin.readline().rstrip())
if i == n-1:
result += m
else:
result += m-1
print(result)
근데도 시간 초과가 떠서 질문을 찾아봤는데
입력값 n에 지금 500,000이 들어가기 때문에, input에서 범위가 너무 커서 시간초과를 띄운 것이라고 했다.
그래서 input으로 입력값을 받지 말고 sys모듈을 사용하여 사용자에게 입력받으면 시간 에러가 훨씬 단축된다고 했다.
import sys
n = sys.stdin.readline()
이걸로 받으면 시간이 훨씬 단축됨.
그래서 n, m을 다 sys.stdin.readline()으로 바꿔주니 시간초과가 뜨지 않았다.
(* sys.stdin.readline()으로 바꾸고 enumerate()랑 for문 2번 썼는데, 시간 에러 없음. 결국 input()이 문제였다..)
코드
import sys
n = int(sys.stdin.readline().rstrip())
result = 0
for i in range(n):
#멀티탭의 플러그 갯수 m
m = int(sys.stdin.readline().rstrip())
if i == n-1:
result += m
else:
result += m-1
print(result)
결과
'IT 공부 > 코딩테스트' 카테고리의 다른 글
[백준 5522번] 카드 게임 - 파이썬 (0) | 2023.07.30 |
---|---|
[백준 10872번] 팩토리얼 - 파이썬 (0) | 2023.07.29 |
[백준 2446번] 별 찍기 - 9 파이썬 (출력 형식이 잘못되었습니다.) (0) | 2023.07.29 |
[백준 2445번] 별 찍기 - 8 - 파이썬 (0) | 2023.07.29 |
[백준 9325번] 얼마? - 파이썬 (0) | 2023.07.29 |