SWLUG(2025)/Algorithm

[2학기 2주차] 숫자의 합, 바구니 뒤집기

batterygj 2025. 9. 21. 23:01

문제

N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.

입력

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


N = int(input())

numbers = input()

total_sum = 0

for digit in numbers:
    total_sum += int(digit)

print(total_sum)

 

1. 숫자의 개수를 입력받는다.

2. 공백없는 N개의 숫자를 입력받는다.

3. 숫자들의 합을 저장할 변수를 초기화한다.

4. digit은 반복문이 한번 실행 될 때마다 numbers문자열에서 하나의 문자를 임시로 담는 역할을 하는 변수이다. 문자열의 각 문자를 정수형으로 변환하여 total_sum에 더한다.

5. 최종 합을 출력한다.

 

 

 (첫째줄에 3이 주어지고 둘째줄에 10548이 주어지는 경우 숫자를 합하는 경우가 2가지 존재하기때문에 이런경우는 어떻게 해야할지 고민함.  -> 공백없이 숫자가 주어지므로 각각의 문자가 하나의 숫자라는 의미로 해석해야함! + 예제4 경우 참고)


문제

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 순서대로 적혀져 있다. 바구니는 일렬로 놓여져 있고, 가장 왼쪽 바구니를 1번째 바구니, 그 다음 바구니를 2번째 바구니, ..., 가장 오른쪽 바구니를 N번째 바구니라고 부른다. 

도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다. 도현이는 한 번 순서를 역순으로 바꿀 때, 순서를 역순으로 만들 범위를 정하고, 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.

바구니의 순서를 어떻게 바꿀지 주어졌을 때, M번 바구니의 순서를 역순으로 만든 다음, 바구니에 적혀있는 번호를 가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.

둘째 줄부터 M개의 줄에는 바구니의 순서를 역순으로 만드는 방법이 주어진다. 방법은 i j로 나타내고, 왼쪽으로부터 i번째 바구니부터 j번째 바구니의 순서를 역순으로 만든다는 뜻이다. (1 ≤ i ≤ j ≤ N)

도현이는 입력으로 주어진 순서대로 바구니의 순서를 바꾼다.

 


N, M = map(int, input().split())

baskets = [0] * (N + 1)
for i in range(1, N + 1):
    baskets[i] = i

for _ in range(M):
    i, j = map(int, input().split())
    
    sub_list = baskets[i:j+1]
    sub_list.reverse()
    baskets[i:j+1] = sub_list

for i in range(1, N + 1):
    print(baskets[i], end=' ')

1. N, M을 입력받는다.

2. 길이가 N+1이고(바구니 번호가 1부터 시작하므로 1번부터 N번 인덱스를 사용하기위해) 모든 요소가 0으로 초기화 된 리스트를 만든다. 

(파이썬에서 리스트에 정수를 곱하면, 리스트에 있는 요소들을 그 횟수만큼 반복하여 새로운 리스트를 만듦.

[0] * 3의 의미 : [0, 0, 0] )

3. 1번부터 N번 바구니에 각각 1부터 N까지의 번호를 순서대로 할당한다.

4. 바구니 순서를 역순으로 바꾸는 것을 M번 하므로 매번 i, j를 입력받는다.

5. 슬라이싱을 이용해 i번부터 j번 바구니의 순서를 역순으로 바꾼다. 그리고 바구니번호를 다시 할당한다. ( i=2, j=4이면 [2, 3, 4]에서 [4, 3, 2]순서로 바꾸고 이를 다시 바구니번호 2,3,4로 할당하는것 )

6. 최종적으로 바구니 번호를 출력한다. ( print()는 기본적으로 출력후 줄바꿈을 하지만 end=' '를 사용하여 줄바꿈 대신 공백 한칸을 넣으라고 한다. )