문제 설명
두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
제한 조건
- a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
- a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
- a와 b의 대소관계는 정해져있지 않습니다.
Step1. 문제분석
만약 3,5를 입력할 경우 3+4+5인 12값이,
그게 아닌 반대로 5,3을 입력해도 3+4+5인 12값이 출력된다.
a의 값이 클지 b의 값이 클지는 모른다.
그렇다면 if문을 통해 a의 값이 클경우, 그게 아닐 경우 같은경우는 그냥 그 값만 리턴하면 되니 상관없을 거라고 생각했다.
Step2. 문제풀이 코드
class Solution {
public long solution(int a, int b) {
long answer = 0;
if (a < b) {
for (int i = a; i <= b; i++) {
answer += i;
}
} else {
for (int i = b; i <= a; i++) {
answer += i;
}
}
return answer;
}
}
a>b보다 클 경우 i라는 정수 변수를 만들고 담아준다.
a 가 1이고 b 가 10 이면 i는 a기 때문에 그 차이만큼 10이 될때까지 i증감연산자로 증가할것이고
그 값이 answer에 담긴다.
그러면 1+2+3+4+5+6+7+8+9+10 이런 값이 answer에 담기고 리턴이 된다.
반대의 경우도 마찬가지,
Step3. 다른 사람의 풀이 코드
class Solution {
public long solution(int a, int b) {
long answer = 0;
for (int i = ((a < b) ? a : b); i <= ((a < b) ? b : a); i++)
answer += i;
return answer;
}
}
for문 안에 삼항연산자를 이용하여 문제를 푼경우
아직 삼항연산자가 익숙하지 않아서 이렇게 해결을 하는 방법이 바로 떠오르지가 않는다.
이렇게 풀면 코드의 길이도 많이 줄일 수 있을것 같다.
class Solution {
public long solution(int a, int b) {
return sumAtoB(Math.min(a, b), Math.max(b, a));
}
private long sumAtoB(long a, long b) {
return (b - a + 1) * (a + b) / 2;
}
}
이 해답 코드를 보고나서 벽을 느낀 기분이다.
같은 문제인데도 등차수열의 합 공식을 바로 연관지어 풀수가 있었다.
Math.min로 최소값, Math.max로 최대값 두 값을 넣고
이 둘의 값으로 등차수열의 합 공식을 통해 풀었다. 이렇게 푸는 방식도 알아 놓을 필요가 있겠다.
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스/알고리즘] 없는 숫자 더하기 (자바/Java) (0) | 2022.11.18 |
---|---|
[프로그래머스/알고리즘] 문자열을 정수로 바꾸기 (자바/Java) (0) | 2022.11.18 |
[프로그래머스/알고리즘] 가운데 글자 가져오기 (자바/Java) (0) | 2022.11.18 |
[프로그래머스/알고리즘] 짝수와 홀수 (자바/Java) (0) | 2022.11.18 |
[프로그래머스/알고리즘] 직사각형 별찍기 (자바/Java) (0) | 2022.11.18 |
댓글