2023년 1월 ~ 2월에 프로그래밍을 공부하기 위해 풀었던 문제들이다.
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
출력
첫째 줄에 상수의 대답을 출력한다.
scanf("%1d",&a[i]);
를 통해서 공백 없이 연결되어 입력된 수라고 해도 한글자씩 끊어서 배열에 넣어준다.int a = (100 * a[0]) + (10 * a[1]) + a[2];
int b = (100 * b[0]) + (10 * b[1]) + b[2];
이 코드에서 C2040 오류
가 났다. 그냥 int
와 int 배열
의 형식이 다르다는 소리 같은데 평소에 변수 = 배열의 원소 이렇게 할당하는것은 괜찮았던것을 고려하면, 곱하고 더하는등의 산술이 곤란한 것 같았다. 두 형식이 달라서 일어난 일이니 그냥 a, b 변수를 a, b 배열의 한 인덱스에 값을 계산하여 업데이트 하는 형식으로 코드를 바꾸었다.
a[0] = (100 * a[0]) + (10 * a[1]) + a[2];
b[0] = (100 * b[0]) + (10 * b[1]) + b[2];
// 상수
#include <iostream>
using namespace std;
int main() {
int a[3] = {}, b[3] = {}, temp;
for (int i = 0; i < 3; i++)
scanf("%1d", &a[i]);
for (int i = 0; i < 3; i++)
scanf("%1d", &b[i]);
temp = a[0];
a[0] = a[2];
a[2] = temp;
temp = b[0];
b[0] = b[2];
b[2] = temp;
a[0] = (100 * a[0]) + (10 * a[1]) + a[2];
b[0] = (100 * b[0]) + (10 * b[1]) + b[2];
if (a[0] > b[0])
cout << a[0];
else
cout << b[0];
}
그 당시 풀고나서 다른 사람의 코드를 봤을 때, 이건 너무 좋아서 기억하고 싶다고 생각한 코드가 있었다. 그 코드에서는 굳이 복잡하게 수를 반대로 뒤집은 다음 비교하여 과정을 거치지 않고, 숫자를 입력받은 직후에 바로 비교 후 큰 수를 골라내 반대로 출력했다.
코드보러가기