본문 바로가기
백준 알고리즘

백준 - 1551번 수열의 변화 python 문제풀이 [Hellfer]

by Hellfer 2023. 12. 20.
728x90

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

 

1551번: 수열의 변화

첫째 줄에 수열의 크기 N과 K가 주어진다. N은 20보다 작거나 같은 자연수이고, K는 0보다 크거나 같고, N-1보다 작거나 같은 정수이다. 둘째 줄에는 수열이 ‘,’로 구분되어 주어진다. 수열을 이루

www.acmicpc.net

🔷 알고리즘 분류 - 수학, 구현, 파싱  난이도 - 브론즈 1

1. map 함수는 주어진 함수를 iterable의 각 요소에 적용하여 결과를 반환하는 함수입니다.


예시: y = ', '. join(map(str, x))


x 리스트의 각 요소를 문자열로 변환한 후, 리스트의 각 요소를 쉼표(', ')로 구분하여 문자열로 결합합니다.

 

2. join 함수는 iterable의 각 요소를 하나의 문자열로 결합하는 함수입니다.


예시: result_str = ', '. join(map(str, x))


map(str, x)를 통해 x 리스트의 각 요소를 문자열로 변환한 후, 쉼표(', ')로 구분하여 문자열로 결합합니다.


3. split 함수는 문자열을 지정된 구분자(sep)를 기준으로 분리하여 리스트로 반환하는 함수입니다.


예시: n, m = map(int, input(). split())


사용자로부터 입력받은 문자열을 공백을 기준으로 분리하여 n과 m 변수에 각각 정수로 저장합니다.


4. list 함수는 iterable 객체를 리스트로 변환하는 함수입니다.


예시: x = list(map(int, input(). split(', ')))


사용자로부터 입력받은 문자열을 쉼표(', ')를 기준으로 분리하여 각 요소를 정수로 변환하고, 변환된 요소들을 리스트로 저장합니다.

🔶문제풀이 - 파싱을 이용한 풀이

# n과 m 값을 입력받습니다.
n, m = map(int, input().split())

# 숫자 배열을 입력받아 리스트 x에 저장합니다.
x = list(map(int, input().split(',')))

# 결과를 저장할 빈 리스트를 생성합니다.
result = []

# m번 반복합니다.
for _ in range(m):
    # 매 반복마다 결과 리스트를 초기화합니다.
    result = []
    # 인접한 원소들의 차이를 계산하여 결과 리스트에 저장합니다.
    for i in range(0, len(x) - 1):
        result.append(x[i + 1] - x[i])
    # 결과 리스트를 x로 업데이트합니다.
    x = result

# 결과 리스트를 문자열로 변환하여 출력합니다.
y = ','.join(map(str, x))
print(y)

🔶문제 이해하기

아래와 같은 입력값이 주어진다고 가정해 보겠습니다.

 

5 1
5,6,3,9,-1

 

x = list(map(int, input().split(',')))

 

"5,6,3,9,-1" 입력값을 기준으로 설명하면 다음과 같습니다.

input(). split(', ')를 통해 사용자로부터 입력받은 문자열을 쉼표(', ')를 기준으로 분리합니다. 

 

과는 문자열 리스트 ['5', '6', '3', '9', '-1']가 됩니다.


map(int,...)를 통해 분리된 각 문자열을 정수로 변환합니다. 

 

변환된 결과는 정수 리스트 [5, 6, 3, 9, -1]가 됩니다.


list(...)를 통해 변환된 정수들을 리스트로 저장합니다. 

 

최종적으로 변수 x에는 정수 리스트 [5, 6, 3, 9, -1]가 저장됩니다.

 

# m번 반복합니다.
for _ in range(m):
    # 매 반복마다 결과 리스트를 초기화합니다.
    result = []
    # 인접한 원소들의 차이를 계산하여 결과 리스트에 저장합니다.
    for i in range(0, len(x) - 1):
        result.append(x[i + 1] - x[i])
    # 결과 리스트를 x로 업데이트합니다.
    x = result

 

1. for문을 통해 m(m=1)번 반복합니다.

 

2. m번 반복할 때마다 result 리스트를 초기화합니다.

 

3. 다음 for문을 수행합니다.

 

x = [5, 6, 3, 9, -1]이었을 때, result = [6-5, 3-6, 9-3, -1-9]= [1, -3, 6, -10]이 됩니다.

 

즉, result [i] = x [i+1]-x [i]가 됩니다.

 

4. result의 결괏값을 x로 바꾸고 다시 for문을 m번 반복합니다.

 

y = ','.join(map(str, x))

 

주어진 예시 코드는 정수 리스트 x를 문자열로 변환하고, 각 요소 사이에 쉼표(', ')를 추가하여 하나의 문자열로 합치는 코드입니다.

 

map(str, x)를 통해 정수 리스트 [1, -3, 6, -10]가 문자열 리스트 ['1', '-3', '6', '-10']로 변환됩니다.


', '. join(...)를 통해 문자열 리스트가 '1,-3,6,-10'로 합쳐집니다.


최종적으로 변수 y에는 '1,-3,6,-10'이 저장됩니다.

 

🤗파이팅입니다~ 여러분!!🤗

 

 

 

728x90