본문 바로가기
C#/프로그래머스

[프로그래머스] C# : 두 정수 사이의 합

by TODAYCODE 2021. 8. 1.
반응형

프로그래머스 코딩테스트 연습 Level 1 - 두 정수 사이의 합

 

코딩테스트 연습 - 두 정수 사이의 합

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우

programmers.co.kr

문제의 핵심

1. 반복문과 조건문의 적절한 사용

2. 쉬운 문제이므로 짧은 코딩을 해보자

 


 

정수가 입력되면 두 정수의 대소관계를 파악한 후 작은 수부터 큰 수까지 전부 합하면 된다.

단순하게 생각하면 if를 사용해서 대소관계를 구분한 뒤에

for문을 돌려서 전부 더해주면 된다.

 

이번에는 약간의 문법과 아이디어를 사용해서 코드길이를 짧게해보자.

속도에서는 이점이 없을 수도 있다.

 


첫번째 방법 : C#의 조건 연산자를 사용

for문 내부에 조건 연산자를 넣어버려서 if문 자체를 생략할 수 있다.

 

조건 연산자를 모르겠다면 아래의 포스팅을 참고하자

 

C# : 조건 연산자

입력 방식 조건식 ? 참의 값 : 거짓의 값 int a = 30; string result = a == 30 ? "삼십" : "삼십아님"; == : 조건식 "삼십" : 참의 값 "삼십아님" : 거짓의 값 using System; namespace ConditionalOperator { cl..

coding-of-today.tistory.com

 

 for문 매개변수중 int i 를 선언할 때 조건 연산자를 사용한다.

int i = (a >= b) ? b : a

이렇게 되면 둘 중 작은 숫자로 i가 설정된다.

 

반복조건을 설정할 때는 다음과 같이 설정한다.

i <= a || i <=b

i가 a보다 작거나 b보다 작으면 계속 반복한다.

이러면 i가 큰 수와 같아질때까지 반복된다.

 

이때, ||가 아니라 && 를 사용해야 아닌가 라고 착각을 할 수도 있다.

i <= a && i <= b 로 입력할 경우,

i가 a 이하이면서 b이하일때만 반복되므로 1번밖에 반복이 안된다.

&& 와 ||이 헷갈릴 수도 있으니 잘 생각하자.

 

이렇게 되면 i가 작은 수부터 큰 수까지 커지게되므로 차례로 answer에 합해주면 된다.

 

 

두번째 방법 : 먼저 계산하고 나중에 비교하기

이게 무슨 소리인가 할 수도 있는데 차근차근 설명해보겠다.

a와 b 중 무엇이 큰 수인지 고민하지 않고,

일단 무조건 a부터 answer에 더한다.

그 후에 a를 b와 비교해서 대소관계에 따라 a를 +1 or -1을 해준다.

이 과정을 a와 b가 같아질때까지 반복한다.

 

어차피 2개의 숫자 사이의 모든 수를 더하기만 하면 되는 문제이기 때문에,

반드시 작은 수부터 더해나가야하는 것은 아니다.

큰 수부터 -1씩 하면서 작은수까지 더해도 된다.

 

따라서 아무것도 따지지 않고 우선 a를 더하고,

그 다음에 a가 큰지 b가 큰지를 구분해서 적절하게 +1or-1을 계속 반복하면 된다.

 

a와 b가 동일한 값이 되면 반복을 끝내고

최종적으로 a나 b를 더해준다음에

answer를 출력하면 된다.

 

 

 

정답 코드 : 숫자 크기를 비교해서 풀기 

public class Solution
    {
        public long solution(int a, int b)
        {
            long answer = 0;
            for (int i = (a >= b) ? b : a; i <= a || i <= b ; i++)
            {
                answer += i;
            }
            return answer;
        }
    }

정답 코드 : 먼저 계산하고 나중에 비교하기

public class Solution {
    public long solution(int a, int b) {
        long answer = 0;
        
        // a와 b가 같아질때까지 반복
        while (a != b)
        {
        // answer에 a를 더함
            answer += a;
            
            // a가 b보다 크면 -1 / 작으면 +1 => 반복하면 언젠가 a=b가 됨.
            a = (a > b) ? a - 1 : a + 1;
        }
        
        // 마지막에 b를 더해주면서 마무리함

        return answer + b;
    }
}

 

 

반응형

댓글