프로그래머스 코딩테스트 연습 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;
}
}
'C# > 프로그래머스' 카테고리의 다른 글
[프로그래머스] C# : 서울에서 김서방 찾기 (0) | 2021.08.02 |
---|---|
[프로그래머스] C# : 가운데 글자 가져오기 (0) | 2021.08.01 |
[프로그래머스] C# : 정수 내림차순으로 배치하기 (0) | 2021.07.31 |
[프로그래머스] C# : 콜라츠 추측 (0) | 2021.07.31 |
[프로그래머스] C# : 자연수 뒤집어 배열로 만들기 (0) | 2021.07.31 |
댓글