Notice
Tags
- 리눅스마스터2급
- c++
- 자격증
- Linux
- 티스토리챌린지
- pytorch
- Image_classification
- programmers
- Unix_System
- Algorithm
- codingTest
- tensorflow
- Android
- Univ._Study
- 오블완
- Operating_System
- Artificial_Intelligence
- Kubernetes
- Baekjoon
- app
- Python
- SingleProject
- datastructure
- cloud_computing
- C
- Java
- Personal_Study
- study
- 2023_1st_Semester
- Database_Design
코딩 기록 저장소
[프로그래머스/Python] 숫자의 표현 본문
문제 정보
제목 : 숫자의 표현
난이도 : Lv.2
사용 언어 : Python
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12924
문제 설명
Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.
- 1 + 2 + 3 + 4 + 5 = 15
- 4 + 5 + 6 = 15
- 7 + 8 = 15
- 15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.
제한 사항
- n은 10,000 이하의 자연수 입니다.
입출력 예
n | result |
15 | 4 |
입출력 예 설명
입출력 예#1
문제의 예시와 같습니다.
나의 풀이
실패한 방법
이중 for문을 만들어서 sum 변수에 숫자를 더한후 만약 n과 일치하면 answer에 1을 증가시키고 내부의 for문을 break합니다. 하지만 이 방법으로는 정확성 테스트는 통과했으나 효율성 테스트에서 실패 (실행 초과)하게 되었습니다.
def solution(n):
answer = 1
for i in range(1,n) :
sum = 0
for j in range(i, n):
sum += j
if (sum == n):
answer +=1
break
return answer
통과한 방법
효율적인 방법을 찾아야할 것 같아 팁을 찾아보던 중 i번째 숫자는 최대 int(n/i)번의 덧셈이 가능하다는 팁을 보게 되었습니다. 그래서 maxCount 변수에 int(n/i) 값을 저장한 후 내부의 for문에 count변수를 1씩 증가시키면서 비교하다가 maxCount를 넘어가면 break할 수 있도록 했습니다. 이렇게 코드를 작성하자 효율성 부분에서도 통과할 수 있었습니다.
코드
def solution(n):
answer = 1
for i in range(1,n) :
maxCount = int(n/i)
sum = 0
count = 0
for j in range(i, n):
if ( count > maxCount):
break
sum += j
if (sum == n):
answer +=1
break
count +=1
return answer
'프로그래머스 > Lv.2' 카테고리의 다른 글
[프로그래머스/Python] 피보나치 수 (3) | 2023.01.20 |
---|---|
[프로그래머스/Python] 다음 큰 숫자 (0) | 2023.01.20 |
[프로그래머스/Python] 이진 변환 반복하기 (0) | 2023.01.19 |
[프로그래머스/Python] 올바른 괄호 (0) | 2023.01.19 |
[프로그래머스/C++] 최솟값 만들기 (0) | 2023.01.19 |