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'이 저장됩니다.
🤗파이팅입니다~ 여러분!!🤗
'백준 알고리즘' 카테고리의 다른 글
백준 - 10162번 전자레인지 python 문제풀이 [Hellfer] (0) | 2023.12.25 |
---|---|
백준 - 17626번 Four Squares python 문제풀이 [Hellfer] (2) | 2023.12.23 |
백준 - 9461번 파도반 수열 python 문제풀이 [Hellfer] (2) | 2023.12.22 |
백준 - 11051번 이항 계수 2 python 문제풀이 [Hellfer] (2) | 2023.12.21 |
백준 - 21736번 헌내기는 친구가 필요해 python 문제풀이 [Hellfer] (0) | 2023.12.19 |
백준 - 28061번 레몬 따기 python 문제풀이 [Hellfer] (2) | 2023.12.17 |
백준 - 9375번 패션왕 신해빈 python 문제풀이 [Hellfer] (0) | 2023.12.15 |
백준 - 20291번 파일 정리 python 문제풀이 [Hellfer] (0) | 2023.12.14 |