⭐문제 설명
두 정수 a , b 가 주어졌을 때 a 와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
입출력 예
int a | int b | result |
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
제한 조건
- a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
- a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
- a와 b의 대소관계는 정해져있지 않습니다.
⭐문제 풀이
내 풀이 (첫 시도)
코드 실행시 성공은 하였지만 같은 내용이 반복되는게 마음에 들지않아 다른방법으로 다시 도전하였다.
class Solution {
public long solution(int a, int b) {
long answer = 0;
if(a<=b){
while(a<=b){
answer += a;
a++;
}
} else{
while(a>=b){
answer += a;
a--;
}
}
return answer;
}
}
내 풀이
class Solution {
public long solution(int a, int b) {
long answer = 0;
long abs = Math.abs(a-b);
for(int i = 0; i<abs+1; i++){
answer += a;
a += (a < b) ? 1 : -1;
}
return answer;
}
}
다른 사람 풀이
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.abs()
java.lang.Math 클래스에 포함된 abs 메소드는 절대값을 구할때 사용된다.
전달된 값이 양수이면 양수를 그대로 반환하고, 음수이면 양수로 변경되어 반환된다.
int a = 5;
int b = 3;
// 결과 출력
System.out.println(Math.abs(a-b)); // 출력: 2
◆ 삼항연산자 추가정보
// 실행 안됨
for(int i = 0; i<abs; i++){
answer += a;
a < b ? a++ : a--;
}
⭐ 삼항 연산자는 값만 반환할 뿐, 실제로 a++ 또는 a--와 같은 명령을 수행하지 않는다.
//수정 코드
for(int i = 0; i<abs+1; i++){
answer += a;
a += (a < b) ? 1 : -1;
}
'Backend > Java - Coding Test' 카테고리의 다른 글
[프로그래머스(Java)] Lv.1 문자열 내 p와 y의 개수 / String.equalsIgnoreCase() (0) | 2024.10.30 |
---|---|
[프로그래머스(Java)] Lv.1 문자열을 정수로 바꾸기 / Integer.parseInt() (0) | 2024.10.28 |
[프로그래머스(Java)] Lv.0 리스트(배열) - n번째 원소부터 / Arrays.copyOfRange() (0) | 2024.09.12 |
[프로그래머스(Java)] Lv.0 문자열 - 접두사인지 확인하기 (+ 접미사) / startsWith() / endsWith() (0) | 2024.09.11 |
[프로그래머스(Java)] Lv.0 연산 - 문자 리스트를 문자열로 변환하기 / String.join() (0) | 2024.09.11 |