Hi, There!
안녕하세요, 바오밥입니다.
목차
- 문제
- 풀이
문제
문제 내용
https://school.programmers.co.kr/learn/courses/30/lessons/120923
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
나의 풀이
- 무식하게 for문으로 푼 풀이
- 시작지점 변수와 누적 변수를 만들어 시작지점 변수부터 누적 변수까지 누적한 값이 total과 동일하면 해당 시작지점 변수를 이용해서 배열을 반환하는 풀이
class Solution {
public int[] solution(int num, int total) {
int sum = -1001;
int start = 0;
while(sum != total) {
sum = 0;
for(int i=start; i<start+num; i++) {
System.out.printf("%d ", i);
sum += i;
}
if(sum>total) start--;
else if(sum<total) start++;
}
int[] answer = new int[num];
int idx = 0;
for(int i=start; i<start+num; i++) {
answer[idx] = i;
idx++;
}
return answer;
}
}
다른 사람의 풀이
- 수학 공식을 활용한 풀이
- 1부터 n까지의 자연수 합을 구하는 공식은 아래와 같다.
(n*(n+1)) / 2
- 위의 공식을 이용하여 기본형 total 값에서 구하려고 하는 total 값을 빼고 시작점을 찾기 위해 num 으로 나눈 후 1를 더한다.
- 더 자세한 설명은 아래를 참고하면 도움이 될 것이다.
https://school.programmers.co.kr/questions/46600
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int check = num*(num+1) / 2;
int start = (total - check) / num + 1;
for (int i = 0; i < answer.length; i++) {
answer[i] = start + i ;
}
return answer;
}
}
'Dev > PS' 카테고리의 다른 글
[백준-완전탐색] 1816 암호 키 (0) | 2023.09.23 |
---|---|
[프로그래머스-코딩테스트 입문] 다음에 올 숫자 (0) | 2023.09.22 |
[프로그래머스-코딩테스트 입문] 종이 자르기 (0) | 2023.09.21 |
[프로그래머스-코딩테스트 입문] 문자열 밀기 (0) | 2023.08.30 |
[프로그래머스-코딩테스트 입문] k의 개수 (0) | 2023.08.30 |