인트로
알고리즘 코드는 C 또는 C++ 기반으로 작성되었습니다.
비슷하면서도 약간 다른 문제가 기억에 남아 기록하려 한다.
생각의 틀을 조금만 바꾸면 되는 문제이다.
자연수의 합
문제
자연수 A, B가 주어지면 A부터 B까지의 합을 수식과 함께 출력하세요.
첫 줄에 자연수 A, B가 공백을 사이에 두고 차례대로 입력된다. (1<=A<B<=100)
첫 줄에 더하는 수식과 함께 합을 출력합니다.
입력
3 7
출력
3 + 4 + 5 + 6 + 7 = 25
코드
A부터 B까지 수를 더하는 건 정말 간단하다.
숫자와 + 기호를 한 묶음으로 출력하면 된다.
(3 + ) (4 +) (5 +)...
애매한 건 마지막 숫자인데 for문을 마지막 숫자 전까지만 돌리고 for문 밖에서 마지막 숫자를 출력하면 된다.
#include <iostream>
using namespace std;
int main()
{
int a, b, res = 0;
cin >> a >> b;
for (int i = a; i < b; i++)
{
cout << i << " + ";
res += i;
}
res += b;
cout << b << " = " << res;
return 0;
}
진약수의 합
문제
자연수 N이 주어지면 자연수 N의 진약수의 합을 수식과 함께 출력하는 프로그램을 작성하세요.
첫 줄에 자연수 N이 주어집니다. (3<N<=100)
첫 줄에 더하는 수식과 함께 합을 출력합니다.
입력
20
출력
1 + 2 + 4 + 5 + 10 = 22
코드
'자연수의 합' 문제와 비슷하다.
for문을 돌면서 약수인지 검사하고 출력하면 된다.
다만 이번엔 고민되는 부분이 있다.
'자연수의 합' 문제처럼 (1 + ) (2 + )..처럼 묶어서 출력할 수 없다. 마지막에 출력될 약수가 무엇인지 모르기 때문이다.
따라서 마지막 약수의 출력과 for를 분리할 수 없다.
생각을 전환해보면 1이란 숫자는 모든 정수의 약수이다.
1을 기본적으로 출력하고 ( + 2) ( + 4) ( + 5)를 한 묶음으로 생각하고 출력하면 문제가 쉬워진다.
#include <iostream>
using namespace std;
int main()
{
int a, res = 1;
cin >> a;
cout << 1;
for (int i = 2; i < a; i++)
{
if (a % i == 0)
{
res += i;
cout << " + " << i;
}
}
cout << " = " << res;
return 0;
}
'Algorithm > it 취업을 위한 알고리즘 문제 풀이' 카테고리의 다른 글
[Algorithm] 18. 층간소음 (0) | 2021.07.29 |
---|---|
[Algorithm] 16. Anagram(아나그램 : 구글 인터뷰 문제) (0) | 2021.07.28 |
[Algorithm] 9. 모두의 약수 (0) | 2021.07.23 |
[Algorithm] 11. 숫자의 총 개수(small, large) (0) | 2021.07.22 |
[Algorithm] 10. 자릿수의 합 (0) | 2021.07.21 |