고급협동조합의 OSM

https://www.acmicpc.net/problem/1000

 

1000번: A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

 

출력

첫째 줄에 A+B를 출력한다.


풀이

엄랭 2.0에서는 원칙적으로 두 변수를 직접 더할 수 없기 때문에, 한 쪽 변수의 값을 다른 쪽으로 1씩 전달하는 방법을 사용합니다. 예를 들어 13+7의 경우, 7가 들어 있는 변수에서 1을 빼고, 동시에 13이 들어 있는 변수에 1을 더하고(14+6), 다시 6이 들어 있는 변수에서 1을 빼고, 동시에 14가 들어 있는 변수에 1을 더하고(15+5), ... 이 과정을 한 쪽 변수의 값이 0이 될 때까지 반복하면 20+0이 되고, 여기서 첫 번째 변수의 값을 가져오면 이는 13+7의 결과와 같습니다.

 

코드

어떻게
엄식?
어엄식?
동탄어어?준... ...
어엄어어,
엄어.
준.. ..

식어!
화이팅!.,
이 사람이름이냐ㅋㅋ

01│어떻게

02│식?

03│어엄식?

→ 정수 2개를 입력받아 각각 1번 변수(A), 2번 변수(B)에 저장합니다.

 

(반복문 시작)

04│동탄어어?... ...

05│어엄어어,

06│.

07│.. ..

(반복문 끝)

 5~7번째 줄: 2번 변수(B)의 값을 하나씩 1번 변수(A)로 옮깁니다.

→ 4번째 줄: 전부 옮겼으면 3×3=9번째 줄로 넘어갑니다.

 

08│

09│!

10│화이팅!.,

11│이 사람이름이냐ㅋㅋ

→ 1번 변수의 값을 출력하고 return 0;을 실행합니다(∴ +1-1=0).

※ 참고: 10번째 줄에서 '화이팅!' 뒤에 나오는 .,를 아예 제거해도 결과가 똑같이 나올 수 있습니다. 숫자가 올 자리에 아무것도 없으면 0으로 처리하는 구현체가 많기 때문입니다(명세에는 이러한 경우를 처리하는 방법이 나와 있지 않습니다). ummc(c 컴파일러), 파이썬 인터프리터, 엄랭 deno, vba 인터프리터에서는 동일한 결과가 나오는 것을 확인했고, 다른 구현체에서도 같은 결과가 나올 수 있습니다. 하지만 호환성을 위해 여기에서는 오류 및 상이한 해석의 여지가 나오지 않을 코드를 작성했습니다.

 

알고리즘에서 덧셈을 하는 경우는 매우 자주 나오기 때문에, 필요하다면 언제든지 이 글을 언급하도록 하겠습니다.

profile

고급협동조합의 OSM

@고급협동조합

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!