반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12924
코드 및 풀이
첫 코드
/*
연속된 숫자의 합이니깐 반복문을 돌때 j가 i일때부터 n을 넘기기 전까지 넘긴다면 애초에 말이 안되는거니깐
근데 만약에 j = n이면 이탈하는거로 결정
그리고 숫자의 반 + 1까지만 돌아도 됨
ex)
10000 -> 5000 + 5001을 하면 애초에 이탈임
9999 -> 4999 + 5000하면 딱 맞음
*/
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for(int i = 1; i < (n/2) + 1; i++){
int j = i;
int sum = 0;
while(j<n){
sum += j;
if(sum == n){ //숫자가 맞으면 진행
answer++;
break;
}
j++;
}
}
answer++; //만약 10000이라면 5000까지 돌았으니 10000은 되는거니깐
return answer;
}
이렇게 하니 다 맞았는데 틀렸다고 효율성에서 다 틀렸다고 나왔다
내가 뭘 잘못한거지? 나누기 2까지하면서 쓸데없는 시간을 낭비하지 않았다고 생각하는데?
이렇게 했더니 다 맞았지만 시간 초과가 떴다 문제에서 요구하는 것이랑 너무 하찮게 접근했나보다.
그는 바보가 맞다.
/*
연속된 숫자의 합이니깐 반복문을 돌때 j가 i일때부터 n을 넘기기 전까지 넘긴다면 애초에 말이 안되는거니깐
근데 만약에 j = n이면 이탈하는거로 결정
그리고 숫자의 반 + 1까지만 돌아도 됨
ex)
10000 -> 5000 + 5001을 하면 애초에 이탈임
9999 -> 4999 + 5000하면 딱 맞음
*/
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int n) {
int answer = 0;
for(int i = 1; i < (n/2) + 1; i++){
int j = i;
int sum = 0;
while(j<n){
sum += j;
if(sum == n){ //숫자가 맞으면 진행
cout<<j;
answer++;
break;
}else if(sum > n)
break;
j++;
}
}
answer++; //만약 10000이라면 5000까지 돌았으니 10000은 되는거니깐
return answer;
}
sum > n일때 break를 안걸어줬다 바보. 잠시 앉아서 1분동안 쳐다봤는데 이런 실수를 하다니.
반응형
'알고리즘 > c++ 프로그래머스' 카테고리의 다른 글
[프로그래머스] 피보나치 수 c++ (0) | 2023.05.04 |
---|---|
[프로그래머스] 다음 큰 숫자 c++ (0) | 2023.05.03 |
[프로그래머스] 이진변환 반복하기 c++ (0) | 2023.05.02 |
[프로그래머스] 요격 시스템 c++ (0) | 2023.05.02 |
[프로그래머스] 올바른괄호 c++ (0) | 2023.05.02 |
댓글