23.03.22(연산자)

Vinyl Stage·2023년 3월 22일
1

개발일지

목록 보기
14/42

알고리즘문제를 풀면서 다른사람들의 축약된 코드를 보면 굉장히 많은걸 얻을 수 있다.

등차수열의 합을 구하는 문제인데
등차수열의 공식을 까먹은지 한참이라 ㅋㅋ

처음 짠 코드는

백준 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인데 이진수에서 각 비트를 반전시키는 연산을 한다.
그러므로 -~nn-1이 되고 ~-nn+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")

이는 코드가 오히려 복잡하고 길어져서 버리기로 했다. ㅋㅋ

이상 오늘의 알고리즘 공부 끝

profile
Life is Art

0개의 댓글