ps/boj

11720번 Python

choi-dev 2024. 4. 4. 23:18

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

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net

가장 먼저 든 생각은 파이썬에서도 문자열에 인덱스를 매겨 반복문을 사용할 수 있다는 점을 이용했다. 하지만 머릿 속에 문자를 굳이 형변환하지 않고도 할 수 있는 방법이 있을텐데를 고민했다.

 

N = int(input())
string = str(input())

sum = 0
for char in string:
    sum += int(char)
print(sum)

정답이긴 하지만 더 좋은 풀이가 있을 것이라 생각해서 다른 사람들 풀이를 봤다.

 

N = int(input())

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

파이썬의 map을 이해하고 있다면 이것이 왜 정답인지 알 수 있다. map은 이터러블한 객체를 하나씩 뽑아둔 객체임을 알 수 있다.

 

test = list(map(int, input()))
print(test)

54321을 입력하면 [5, 4, 3, 2, 1]이 나온다. map 자체로 출력하면 map object가 나오기 때문에 리스트로 형변환해서 그 결과를 확인한 것이다. 이를 이용해 객체를 도출해내어 sum 메소드를 사용해 이를 더한 것을 알 수 있다.

 

import sys

N = int(sys.stdin.readline())
string = map(str, sys.stdin.readline())
sum = 0
for char in string:
    sum += int(char)

참고로 sys 모듈에 있는 stdin.readline() 메소드를 사용하기 위해서는 \n 개행 문자에 대해 신경써야한다. 따라서 .rstrip과 같은 은 것을 사용해야할 것이다.