Eat the ENAK

BOJ1000 - A+B 본문

PS: Problem Solving/BOJ: 백준온라인저지

BOJ1000 - A+B

으낙 2019. 10. 30. 16:48

문제 바로가기

http://boj.kr/1000

Solved.ac* 난이도

* Solved.ac는 백준 온라인 저지의 문제들에 난이도를 매겨주는 서비스입니다. 자세한 내용은 홈페이지를 참고해주세요.

 


본문


해설

https://github.com/return0927/CodingWrite-UP/blob/master/BOJ/1000/

 

return0927/CodingWrite-UP

Write-Ups for various programming(esp. coding) challenges. - return0927/CodingWrite-UP

github.com

아주 간단한 입출력 문제이다. 띄어쓰기로 구분된 두 정수를 받아 두 정수의 합을 출력한다.

Python 풀이

print(sum([int(x) for x in input().split(" ")]))

list comprehension을 이용하면 위와 같이 한 줄로 표현할 수 있다. 띄어쓰기로 구분된 숫자들을 정수로 변환해준 후에 sum연산으로 더해준다.

 

하지만 더 간단히 나타내면 다음과 같다.

print(sum(map(int,input().split())))

list comprehension을 map함수로 변환한 것이며, 36B짜리 코드이다. 깊게 생각해봤는데 이 이상으로 숏코딩을 할 수 없었으나, 더 간단히 나타낼 수 있다.

print(eval('+'.join(input())))

마지막 코드가 알려진 가장 짧은 Python3 풀이다. 첨언하자면 마지막 풀이는 두 정수 중 하나라도 10 이상이 되면 정상적인 합을 출력해주지 않는다. str.join(iterable) 함수는 iterable 사이사이에 str를 끼워주는데, 

>>> '+'.join(input())
1 2
1+ +2
>>> '+'.join(input())
12 3
1+2+ +3

처럼 되기 때문에 모든 자릿수의 합이 되어버린다.

 

C++(C) 풀이

#include <cstdio>

int main() {
    int a, b;
    scanf("%d %d", &a, &b);
    printf("%d", a+b);
    return 0;
}

scanf는 bof 취약점 때문에 scanf_s를 대신 사용하도록 추천되고 있다만, 문제풀이에 그럴리가 없으니 그냥 썼다. 다만 첫줄만 바꿔주면 Pure C에서도 동일하게 해결할 수 있는데, Pure C++로 풀면 아래와 같다.

 

C++17풀이

#include <iostream>

using namespace std;

int main() {
    int a, b;
    cin >> a >> b;
    cout << a + b;
    return 0;
}

 

'PS: Problem Solving > BOJ: 백준온라인저지' 카테고리의 다른 글

BOJ1001 - A-B  (1) 2019.10.31
BOJ7568 - 덩치  (0) 2019.10.30
BOJ1436 - 영화감독 숌  (0) 2019.10.30
BOJ2750 - 수 정렬하기  (0) 2019.10.30
BOJ2231 - 분해합  (0) 2019.10.29
Comments