프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
내코드
def solution(num, total):
if num == 1:
return [total]
else:
a = (total - (num * (num - 1)) // 2) // num
return [a + i for i in range(num)]
코드설명
이 코드는 num개의 연속된 정수를 더한 값이 total이 되도록 하는 연속된 정수들의 리스트를 반환하는 함수입니다.
- num == 1: 만약 num이 1이면, 반환값은 total 그대로입니다. 즉, 연속된 수가 하나뿐일 때는 그 수가 바로 total이 됩니다.
- else: num > 1인 경우, 연속된 수의 시작 값 a를 계산합니다.
- total - (num * (num - 1)) // 2는 total에서 num개의 연속된 수들의 합을 보정하는 부분입니다.
- // num을 사용하여 정수 연산을 하여 a를 구합니다. 그 후, a + i를 반복문을 통해 연속된 수들을 생성합니다.
특징
- 단순한 계산: 수학적 공식을 사용하여 연속된 수들의 시작값을 계산합니다.
- 효율적인 계산: for문을 사용하여 연속된 수들을 쉽게 생성하고, 계산이 간단합니다.
- 정수 연산: 모든 계산에서 실수 연산을 피하고, 정수 연산을 통해 정확한 결과를 얻습니다.
다른 코드
def solution(num, total):
return [(total - (num * (num - 1)) // 2) + i for i in range(num)]
코드설명
이 코드는 연속된 정수의 합이 total이 되도록 하는 방법을 계산하는 또 다른 방식입니다.
- num개의 연속된 수를 더한 값이 total이 되도록 시작값을 계산합니다.
- total - (num * (num - 1)) // 2를 사용하여 연속된 수들의 합에서 보정값을 뺀 후, i값을 추가하여 연속된 수들을 직접 계산합니다.
특징
- 가독성 높은 코드: 연속된 수들을 한 줄로 계산하며, 코드가 짧고 직관적입니다.
- 리스트 컴프리헨션 사용: 리스트 컴프리헨션을 사용하여 연속된 수를 한 번에 생성합니다.
- 한 줄로 계산: 조건문 없이 한 줄로 문제를 해결하므로 매우 간단하고 직관적입니다.
두 코드 비교
두 코드의 방식은 동일한 수학적 원리를 사용하고 있지만, 구현 방식이 다릅니다.
- 내 코드:
- if문을 사용하여 num == 1일 경우를 처리하고, else문을 사용하여 연속된 수들의 시작값을 구한 뒤 for문을 사용해 연속된 수들을 생성합니다.
- 코드가 조금 더 길고 세부적인 처리가 명확하게 나누어져 있습니다.
- 다른 코드:
- if문 없이, 연속된 수를 한 줄로 생성할 수 있도록 list comprehension을 사용합니다. 코드가 더 짧고 직관적입니다.
- 연속된 수를 직접 계산하기 때문에 더 간단하고 가독성이 좋습니다.
결론
첫 번째 코드는 세부적인 처리를 명확하게 나누어 구현한 코드입니다. 이는 가독성은 다소 떨어질 수 있지만, 각 부분을 명확하게 구분하여 이해하기 쉬운 구조입니다. 반면, 두 번째 코드는 리스트 컴프리헨션을 사용하여 더 간결하고 직관적으로 문제를 해결합니다. 두 코드 모두 동일한 결과를 반환하지만, 상황에 맞게 코드를 간결하게 작성할 수 있는 방법을 제시합니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 | Python | 겹치는 선분의 길이 (1) | 2025.01.21 |
---|---|
프로그래머스 | Python | 안전지대 (1) | 2025.01.20 |
프로그래머스 | Python | 다음에 올 숫자 (0) | 2025.01.17 |
프로그래머스 | Python | 특이한 정렬 (1) | 2025.01.16 |
프로그래머스 | Python | 문자열 밀기 (1) | 2025.01.15 |