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 과제는 자스…;;;) 이거 이렇게 하는게 맞나; 싶기는 한데… 그래도 일단 당장 필요한 영역은 아니니.. 자스와 자바에 다시 집중해볼 필요가 있어 보인다. (물론 인셉션을 아직 안한건 유머… 내일 부턴 인셉션하자…ㅠ)