<코딩 테스트>
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
<나의 풀이 과정>
1. int[] answer = 답의 배열의 길이는 num와 같아야합니다.
2. x + x+1 + x+2 + x+3 + x+4... 1부터 곱해야하는 수를 모두 모아 더하고
맨 앞의 x를 구해야 합니다.
3. for문을 이용하여 모두
for(int i = 1; i < num; i++){ // 1부터 num-1까지 모두 더하기
xNum+=i;
}
공식: (num*(num+1))/2 = xNum
4. 이제 x를 찾아야합니다.
int x = (total - xNum) / num; // 연속되는 숫자 중 맨 처음 숫자
// 1+2+3+4 다 더한 값에서 =10 이제 ttl 값 15를 빼면 5/5 =1
5. x를 for문을 이용해서 하나씩 더해줍니다.
<나의 풀이 코드>
package com.programmers.level00.연속된수의합;
//연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다.
//연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
public class Test {
public static void main(String[] args) {
System.out.println(solution(3, 12));// [3, 4, 5]
System.out.println(solution(5, 15));// [1, 2, 3, 4, 5]
}
static int[] solution(int num, int total) {
// 연속된 정수
// ex) num = 5, total = 15
// 연속된 정수 5개를 모두 더했을 때 15가 되는 정수들을 오름차순으로 배열에 담기
// num이 5일때
// x + x+1 + x+2 + x+3 + x+4 = 15
// 5*x + (1+2+3+4) = 15 / num * x + (1+2+3+.....+num-1) = total
// 5x = 15-10=5
// x = 1
int[] answer = new int[num];
int xNum = 0; // 1부터 num-1 까지 모두 더한 숫자
//x + x+1 + x+2 + x+3 + x+4... 1부터 곱해야하는 수를 모두 모아 더함.
for(int i = 1; i < num; i++){ // 1부터 num-1까지 모두 더하기
xNum+=i; // 공식있음 : (num*(num+1))/2 = xNum
}
int x = (total - xNum) / num; // 연속되는 숫자 중 맨 처음 숫자
// 1+2+3+4 다 더한 값에서 =10 이제 ttl 값 15를 빼면 5/5 =1
for(int i = 0; i < num; i++){ // 정답 배열에 숫자 x부터 1씩 증가한 값 더한값 넣어주기
answer[i] = x + i; // answer = [1,1+1,1+2,1+3,1+4]
}
return answer;
}
}
<다른 사람 풀이>
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;
}
}
<다른 사람 풀이>
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int nSum = num * (1 + num) / 2;
int start = (total - nSum) / num;
for(int i=1; i<num+1; i++){
answer[i - 1] = i + start;
}
return answer;
}
}
//설명
/*
등차수열의 합 공식을 응용하여 문제를 풀이하였습니다.
첫번째 테스트 케이스를 대입 하여 풀어보겠습니다.
a. num = 3, total = 12
b. nSum = 3 * (1 + 3) / 2 ## nSum은 6
c. start = (12 - 6) / 3 ## start는 2
d. for문 돌며 1 ~ 3까지 반복하면서 answer배열에 i+start를 해줍니다.
e. answer 배열에 3,4,5가 저장됩니다.
*/
https://school.programmers.co.kr/learn/courses/30/lessons/120913
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'주니어 기초 코딩공부 > JAVA_programmers_코딩테스트' 카테고리의 다른 글
분수의 덧셈_programmers_lev00 (0) | 2023.01.05 |
---|---|
구슬을 나누는 경우의 수_programmers_lev00 (0) | 2023.01.04 |
다음에 올 숫자_programmers_lev00 (0) | 2023.01.01 |
최빈값 구하기_programmers_lev00 (0) | 2023.01.01 |
OX퀴즈_programmers_lev00 (0) | 2023.01.01 |