지나가던 개발자
[Python] 백준 15667번(2018 연세대학교 프로그래밍 경진대회) 문제 풀이 본문
print(int((-1+(1-4*(1-int(input())))**(1/2))//2))
1줄이긴 하지만 상당히 복잡해보이는 코드인데, 사실 그 내용은 굉장히 간단하다. 바로 대한민국 국민이라면 누구나 알 이차방정식의 근의 공식을 이용한 것이다...! 2a분의 -b 플러스마이너스 루트 b의 제곱 마이너스 4ac...!
우리는 k값을 구해야 하므로 k를 미지수로 한 이차방정식을 세우면, 총 불꽃의 수를 n이라고 했을 때에 처음 쏜 큰 불꽃 1개, 갈라진 중형 불꽃 k개, 중형 불꽃 k개에서 k개씩 갈라졌으므로 k²개가 된 소형 불꽃이 있으므로
1 + k + k² = n, 이항하면,
k² + k + (1-n) = 0. 이렇게 된 식에서 근의 공식을 쓴 것이 위 코드이다.
2022년 5월 16일 19시 5분 기준으로 숏코딩 51위를 했다!
'PS > Python' 카테고리의 다른 글
[Python] 백준 1225번(이상한 곱셈) 문제 풀이 (0) | 2022.05.19 |
---|---|
[Python] 백준 1850번(최대공약수) 문제 풀이 (0) | 2022.05.18 |
[Python] 백준 2440번(별 찍기 - 3) 문제 풀이 (0) | 2022.05.16 |
[Python] 백준 1977번(완전제곱수) 문제 풀이 (0) | 2022.05.12 |
[Python] 백준 2752번(세수정렬) 문제 풀이 (0) | 2022.05.12 |
Comments