#include <iostream>
using namespace std;
int main()
{
int N = 0;
int a, b, c = 0;
cin >> N;
int sum = 0;
while (N > 0)
{
}
return 0;
}
여기서 막혔습니다.
나머지를 구하는 10으로 나눈 다음 나머지를 알고 싶은데 그 나머지를 구하는 방법을 잘 모르겠습니다.
#include <iostream>
using namespace std;
int main()
{
int N = 0;
cin >> N;
int sum = 0;
while (N > 0)
{
sum += (N % 10);
N /= 10;
}
cout << "The sum is " << sum << endl;
return 0;
}
이것이 정답인데 왜 이 코딩이 정답인지 100% 이해가 되지 않았습니다. 그래서 챗gpt를 통해 따라가보았습니다. 먼저 당연한 것들은 제외하고
사용자로부터 변수 N을 선언하고 0으로 초기화를 해 주었습니다. while문으로 N이 0보다 클 때 반복하게 해주었는데요. sum에 N의 1의 자리 숫자를 더합니다. N을 10으로 나눈 나머지가 N의 1의 자리 숫자입니다.
여기서 헷갈렸던 부분이 만약 N이 123이면 10으로 나눈 나머지는 12아닌가? 라는 의문이 들었는데요. 하지만 N % 10에 대해서 제가 잘 몰라서 그렇게 했습니다. 123 / 10 은 12가 되지만 123 % 10은 N의 일의 자리 숫자를 얻는 것입니다.
%는 나머지를 구하는 것입니다. 만약 123을 10으로 나눴을 때 나머지는 3이 남으니 3을 배출해주는 겁니다.
이런식으로
1. SUM += (123 % 10)에서 123 %10은 3이 되어서 sum에 더해집니다.
2. 123 /= 10을 통해 N은 12가 됩니다.
3. sum += (12 % 10)은 2가 되어 sum에 더해집니다.
4. 12 /= 10을 통해 N은 1이 됩니다.
5. 마지막 루프에서 SUM += (1 % 10);은 1이 되어 sum에 더해집니다.
6. 1/= 10을 하면 N은 0이 되면서 루프는 종료되게 됩니다.
코딩을 처음 접하는 저로써는 이 식도 어렵게 느껴졌지만 이것을 한번 보고 나니 이제 알 수 있을 것 같습니다. 코딩을 하면서 막히는 것에 원리를 이해하는 순간이 정말 짜릿하고 좋은 것 같습니다!!
내가 한 풀이
#include <iostream>
using namespace std;
int main()
{
int N = 0;
int count = 0;
cin >> N;
while (N >= 2)
{
N / 2 > 0;
count++;
N /= 2;
}
cout << "The 2 COUNT is " << pow(2,count) << endl;
return 0;
}
이렇게 제가 생각하면서 한 방식은 이렇게 했습니다.
while문을 사용해서 count++하는 방식으로 마지막에 pow를 통해 거듭제곱을 하는 방식을 했습니다. 하지만 풀이에 더 깔끔한 방식이 있었습니다.
여기서 제가 전에 봤지만 까먹었던 부분은 pow()함수였습니다. pow(2, 3) 이런 식으로 하면 2^3 = 8이런 식으로 되는 것을 볼 수 있습니다. 이처럼 pow를 사용해서 하는 법을 익힐 수 있었습니다.
교수님 풀이
#include <iostream>
using namespace std;
int main()
{
int N = 0;
cin >> N;
int p = 1;
while (p * 2 <= N)
p *= 2;
cout << "The answer is " << p << endl;
return 0;
}
이렇게 p^2 가 N보다 작거나 같을 때 계속해서 p*=2를 해주는 방식이 있었습니다. 이렇게 하면 문제가 풀어지는 것을 볼 수 있었습니다.
제가 한 풀이와 차이점은 저 같은 경우는 while문을 통해 나눠가지고 그 값을 찾았다면 교수님의 풀이는 p라는 변수를 1로 둔 다음에 그 값을 계속에서 2를 곱하면서 N보다 최대한 차이가 작거나 같을 때까지 진해되었다는 것을 볼 수 있습니다. 교수님의 풀이가 직관적으로 더 와닿았던 것 같습니다.
'IT 프로그래밍 > 객체지향프로그래밍' 카테고리의 다른 글
객체지향프로그래밍 그룹 액티비티 5번 문제 해설 (0) | 2024.04.10 |
---|---|
[C++] N개의 정수 중 K와의 차이가 절대값이 작은 정수 출력 프로그램 (0) | 2024.03.10 |
[C++] 1에서 N 사이의 정수들을 모두 종이에 적었을 때 0의 개수 출력 (0) | 2024.03.10 |
[C++] 양의 정수를 이진수로 변환하는 프로그램 (0) | 2024.03.09 |
반복문 for과 while 명품 C++프로그래밍 예제9번 (0) | 2024.03.06 |