알고리즘 문제 "두 정수 사이의 합"를 풀어보았습니다.
두 정수 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의 대소관계는 정해져있지 않습니다.
a와 b 중 작은 숫자와 큰 숫자를 구분하여 작은 숫자부터 큰 숫자까지의 합을 구하는 방식으로 문제를 풀어 보았다.
class Solution {
public long solution(int a, int b) {
long answer = 0;
// a와 b가 같을때는 a값을 출력
if(a == b){
answer = a;
// b가 a보다 클 경우에는 b의 값 만큼 for문을 돌리기
} else if( a < b){
for(int i = a; i <= b; i++){
answer += i;
}
// a가 b보다 클 경우에는 a의 값 만큼 for문을 돌리기
} else if(a > b){
for(int i = b; i <= a; i++){
answer += i;
}
}
return answer;
}
}
우선 3가지의 경우로 나누어 볼 수 있다.
- a 와 b 의 값이 같을때
- a 가 b보다 클때
- b가 a보다 클때
a와 b 의 값이 같을 경우에는 아무거나 리턴 하라기에 저는 a값을 출력했습니다.
그리고 나머지는 작은 수에서 큰 수까지의 합을 구하는 것이기에
a와 b중 누가 더 크냐를 구분하여 그에따른 결과값만 나누어 주면되는 문제입니다.
for문에 내용을 보면 i 는 작은수의 값이 대입이되어 시작하게 됩니다.
입출력 예시에 1번 으로 예를 들면 i = 3 이 될것이고 b는 5가 됩니다.
첫 for문에서는 answer = 3;
두번째 for문에서는 answer = 3 + 4;
세번째 for문에서는 answer = 3 + 4 + 5;
가 되어 총합 12가 나올 것입니다.
아래 코드로 확인해주세요
class Solution {
public long solution(int a, int b) {
long answer = 0;
if( 3 < 5){
for(int i = 3; i <= 5; i++){
answer += 3; //1번째 for문 실행시
// answer += 7; //2번째 for문 실행시
// answer += 12; //3번째 for문 실행시
}
}
return answer;
}
}
문제풀이 이후에 좀 더 좋은 코드로 작성할 수 없을까 싶은 생각에 다시한번 풀어보았다.
if문을 줄여본 방법으로 a 와 b 의 자리에 작은 수가 a에, 큰 수가 b에 들어가게끔 변수를 선언한 후 대입하여 작성해보았다.
class Solution {
public long solution(int a, int b) {
long answer = 0;
int max = Math.max(a,b);
int min = Math.min(a,b);
// System.out.println();
if(a == b){
answer = a;
} else if( min < max){
for(int i = min; i <= max; i++){
answer += i;
}
}
return answer;
}
}
위와 같이 테스트 통과하는 결과물이 나온다.