알고리즘문제를 풀면서 다른사람들의 축약된 코드를 보면 굉장히 많은걸 얻을 수 있다.
등차수열의 합을 구하는 문제인데
등차수열의 공식을 까먹은지 한참이라 ㅋㅋ
처음 짠 코드는
백준 8393번
sum = 0
for i in range(int(input()) + 1):
sum += i
print(sum)
였다가 lambda
를 활용해 줄여보았다.
print((lambda n: sum(range(n+1)))(int(input())))
코드를 해석하자면 입력값 n을 받고 range(n+1)
에서 생성된 숫자들의 합을(sum) 계산하고 반환한다.
숏코딩에서 가장 상단에 있는 코드에서 새로운 연산자를 배웠다.
n=int(input())
print(n*-~n//2)
n*-~n//2
에서
~
는 비트연산자 NOT
인데 이진수에서 각 비트를 반전시키는 연산을 한다.
그러므로 -~n
은 n-1
이 되고 ~-n
은 n+1
이 된다
이를 n
만큼 곱하고 2로 나누면 등차수열의 합을 구할 수 있다.
등차수열을 이해하려했지만 뇌는 이를 포기한듯 싶다.
결국 수학이라니 ㅋㅋ
다음은 영수증 문제이다
백준 25304번
x = int(input())
n = int(input())
sum_a = 0
for i in range(n):
a, b = map(int, input().split())
sum_a += a * b
print("Yes" if sum_a == x else "No")
먼저 이렇게 짜보았으며
for문을 입력한 n번만큼 돌리는데 여기서 a, b값을 각각 입력하는데 a의 b개만큼 값을 n번만큼 돌리며 각각 다른 값이여야 하기때문에sum_a
를 0으로 두고 a*b를 곱하고 더하고 를 하게한다.
이 총합을 sum_a로 하여 처음 입력한 x의 값과 동일할시에 Yes
를 출력하고 아니면No
를 출력하는 것이다.
gpt에게 물어봤을때 List Comprehension으로 줄인코드를 보았는데
x = int(input())
n = int(input())
s = sum([int(a) * int(b) for a, b in [input().split() for _ in range(n)]])
print("Yes" if s == x else "No")
이는 코드가 오히려 복잡하고 길어져서 버리기로 했다. ㅋㅋ
이상 오늘의 알고리즘 공부 끝