답:
import sys
total = int(sys.stdin.readline()[:-1])
N = int(sys.stdin.readline()[:-1])
for i in range(N):
a, b = map(int,input().split())
total -= a*b
print("Yes" if total == 0 else "No")
문제 분석 및 해석
영수증의 수상하게 높은 금액!
입력으로 구매한 각 물건의 가격과 개수, 구매한 물건들의 총 금액이 주어질때 비교하여
같으면 Yes, 다르면 No를 출력하자
1번째 줄 : 영수증에 적힌 총 금액 X
2번째 줄 : 영수증에 적힌 구매한 물건의 종류 수 N
N개의 줄에는 각 물건의 가격
a와 개수
b가 공백을 사이에 두고 주어진다.
입력 값:
250000
4
20000 5
30000 2
10000 6
5000 8
출력:
Yes / No
1) 내가 생각한 풀이
주어진 목록 길이 만큼의 input을 준비해준다
list에 넣고? 혹은 그냥 sum해주고 비교
(+ total에서 빼서 0이면 Yes)
2) 팀원분이 문제를 제안한 이유..!!
import sys
sys.stdin.readline()
input()보다 시간을 덜 쓴다는 readlline() 써보기!
- 과정1 -
문제 이해 후 풀이를 쭉 작성.
input() 값을 받고, 목록만큼의 길이를 재어
각각 상품의 가격과 수량을 받도록 했다.
이후 가격과 수량을 곱한 값을 sum에 입력.
total = int(input())
N = int(input())
sum = 0
for i in range(N):
a, b = map(int,input().split())
sum += a*b
if total == sum:
print("Yes")
else:
print("No")
if문을 한줄로 만들기
print("Yes" if total == sum else "No")
문제의 시간복잡도가 1초여서 코드를 더 가볍게 만드는 방법을 고민하고, 다른 사람의 풀이를 찾아보았다.
더해서 비교해주는 것도 좋지만 total의 값에서 빼주고, 0과 비교하는 방법이 있다는 것을 알게되었다.
if ... :
total -= a*b
print("Yes" if total == 0 else "No")
- 과정2 - readline을 써서 바꾸기
입력받는 값들을 readline을 사용하여 받아주었다
[:-1] 을 쓴 이유는 개행문자 제거를 위함이다.
readline은 한줄을 입력받는 것이어서 \n 개행문자가 함께 들어간다고 한다.
total = int(sys.stdin.readline()[:-1])
N = int(sys.stdin.readline()[:-1])
이렇게 적어주면 성공,
sys.stdin.readline()
readline으로 정수 받기 확실하게 알고 가자!
- 정수 1개 받기
x = int(sys.stdin.readline())
- 한 줄에 여러개의 정수가 들어간 readline을 list로 받기
numbers = list(map(int,sys.stdin.readline().split()))
- 만약 변수에 받고싶으면 각각의 변수를 넣어주어야함
a, b, c = map(int,sys.stdin.readline().split())
+ 팀원분의 풀이를 참고하기 위해 넣어둔다.
import sys
input = sys.stdin.readline
x = int(input())
n = int(input())
items = []
for i in range(n):
a, b = map(int, input().split())
item = a * b
items.append(item)
if x == sum(items):
print("Yes")
else:
print("No")
+분석
코드를 더 간단하게 만들기 위해서 변수에 넣어 정리해줄 수도 있다.
input = sys.stdin.readline
이때 list에 넣어주는 것을 볼 수 있는데, list에 담으면 개행문자가 보인다고 하여 실험해보았다
x = int(input()) # 입력 5
items = []
items.append(x)
print(items) # 출력 [5]
리스트에 담긴 정수가 출력된다.
어디에서 개행문자를 없애주는걸지 고민하다 int를 빼보았다.
x = input() #입력 5
items = []
items.append(x)
print(x) # 5 +개행된 줄이 함께 출력
print(items) #['5\n']
터미널에 쓰여진 결과값:
5 ['5\n'] |
int를 빼고 items 리스트를 출력하면 개행문자가 list에 들어온다!
int로 바꿔줄때 저절로 사라지게 되는 듯 하다.
readline의 주의점은 터미널에서는 개행문자가 보이지 않는다는 것인데,
int로 감싸 사용할때는 큰 문제가 없겠다는 생각이 들었다^.^
[참고] : sys.stdin.readline()를 더 알아보자!
느낀점:
새로운 거 너무 좋아!
'알고리즘 풀이' 카테고리의 다른 글
[algorithm] 페어 - 프로그래머스: 나머지가 1인 수, 없는 숫자 더하기 (0) | 2023.05.01 |
---|---|
[algorithm] 페어 - 프로그래머스: 비밀지도 (0) | 2023.04.28 |
[algorithm] 페어 - 프로그래머스: 영어가 싫어요 (0) | 2023.04.26 |
[algorithm] 페어 - 프로그래머스: 로그인 성공?, n의 배수 고르기 (0) | 2023.04.25 |
[algorithm] 프로그래머스: 중복된 문자 제거 (3) | 2023.04.24 |