반복문 - 8293 25304
TIL of Algorithm
8293 - 합
문제
n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 n (1 ≤ n ≤ 10,000)이 주어진다.
출력
1부터 n까지 합을 출력한다.
예제 입력 / 예제 출력
# 입력
3
# 출력
6
작성 코드
# https://www.acmicpc.net/problem/8393
n = int(input())
ret = 0
for i in range(1, n + 1):
ret += i
print(ret)
# 최적화, 가우스 방정식 적용 예시
n = int(input())
print (n *(n + 1)//2)
후기
반복문의 구조에 부합하게 짜봤지만 제일 빠른 코드는 수학 방정식을 들고와 버리는 것이었구요;; 역시 수학이 필요하다는 건가 싶기도 하다.
25304 - 영수증
문제
준원이는 저번 주에 살면서 처음으로 코스트코를 가 봤다. 정말 멋졌다. 그런데, 몇 개 담지도 않았는데 수상하게 높은 금액이 나오는 것이다! 준원이는 영수증을 보면서 정확하게 계산된 것이 맞는지 확인해보려 한다.
영수증에 적힌,
- 구매한 각 물건의 가격과 개수
- 구매한 물건들의 총 금액
을 보고, 구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하는지 검사해보자.
입력
첫째 줄에는 영수증에 적힌 총 금액 X 가 주어진다.
둘째 줄에는 영수증에 적힌 구매한 물건의 종류의 수 N 이 주어진다.
이후 N개의 줄에는 각 물건의 가격 a와 개수 b가 공백을 사이에 두고 주어진다.
출력
구매한 물건의 가격과 개수로 계산한 총 금액이 영수증에 적힌 총 금액과 일치하면 Yes
를 출력한다. 일치하지 않는다면 No
를 출력한다.
제한
- 1 <= X <= 1 000 000 000
- 1 <= N <= 100
- 1 <= a <= 1 000 000
- 1 <= b <= 10
예제 입력 / 예x제
# 입력
260000
4
20000 5
30000 2
10000 6
5000 8
# 출력
Yes
작성 코드
# https://www.acmicpc.net/problem/25304
total = int(input())
cnt = int(input())
arr = []
for _ in range(cnt):
key, val = map(int, input().split())
pair= [key, val]
arr.append(pair)
ret = sum(pair[0] * pair[1] for pair in arr)
print("Yes") if ret == total else print("No")
# 상당히 깎은 대표 예시
import sys
input = sys.stdin.readline
total = int(input())
for i in range(int(input())):
a,b = map(int,input().split())
total -= a*b
print("Yes" if total == 0 else "No")
후기
기본적으로 내용을 정리하면서 느낀 부분은 자료형에 대한 답답함이다. 각 자료형은 가지고 있는 기능들이 있고, 이를 잘 써야 파이썬에서 원하는 형태로 식을 짤 수 있을 텐데…
알고리즘 코테 준비를 하는게 필수이지만 여기서 어떻게 준비를 해야 하는 걸까? 결국 지금 나에겐 언어 3개를 동시에 해야하는 상황에 가깝다. (자바 백앤드 지원, 파이썬 코테, 42 과제는 자스…;;;) 이거 이렇게 하는게 맞나; 싶기는 한데… 그래도 일단 당장 필요한 영역은 아니니.. 자스와 자바에 다시 집중해볼 필요가 있어 보인다. (물론 인셉션을 아직 안한건 유머… 내일 부턴 인셉션하자…ㅠ)