URL화: 문자열에 들어 있는 모든 공백을 '%20'으로 바꿔 주는 메소드를 작성하라. 최종적으로 모든 문자를 다 담을 수 있을 만큼 충분한 공간이 이미 확보되어 있으며 문자열의 최종 길이가 함께 주어진다고 가정해도 된다 (자바로 구현한다면 배열 안에서 작업할 수 있도록 문자 배열(character array)을 이용하길 바란다).
URL 인코딩에 대해 궁금하다면 https://en.wikipedia.org/wiki/URL_encoding 을 참고하자.
한국어 위키에는 퍼센트 인코딩 이라고 되어있다.
이 문제를 해결하는 가장 쉬운 방법은 replace를 하는것 이겠지만, 그 것을 묻는 것은 아닐 것이다.
이 문제는
- 문자로 구성된 배열(character array)을 이용해 문제를 풀기를 원했고
- 최종적으로 모든 문자를 다 담을 수 있을 만큼 충분한 공간이 이미 확보되어 있다고 가정을 하였다.
따라서 아래와 같이 풀 수 있다.
def urlify(input_str, input_length):
char_array = list(input_str)
space_count = char_array.count(' ')
new_length = input_length + 2 * space_count
# 문자 배열의 크기를 초과하지 않도록 조정
char_array.extend([''] * (2 * space_count))
for i in range(input_length - 1, -1, -1):
if char_array[i] == ' ':
char_array[new_length - 1] = '0'
char_array[new_length - 2] = '2'
char_array[new_length - 3] = '%'
new_length -= 3
else:
char_array[new_length - 1] = char_array[i]
new_length -= 1
return ''.join(char_array)
# 테스트
input_str = "Mr John Smith"
input_length = 13
output = urlify(input_str, input_length)
print(output) # 출력: "Mr%20John%20Smith"
range()
Python 내장 함수 range()의 인자는 세 개의 값으로 구성되어 있습니다:
(start, stop, step).
start: 시작 값입니다. true_length - 1로 설정하여 문자열의 실제 길이에서 1을 빼서 시작합니다.
stop: 종료 값입니다. -1로 설정하여 0까지 역순으로 반복합니다.
step: 각 단계의 크기입니다. -1로 설정하여 역순으로 반복합니다.
python array extend() 메소드
리스트를 배열 맨뒤에 붙입니다. 파라미터는 리스트만 허용.
python array 에 number를 곱하면
그 횟수만큼 concat이 된다.
print(['1', '2'] * 3) # 출력: "['1', '2', '1', '2', '1', '2']"
'스터디-공부 > 알고리즘' 카테고리의 다른 글
정렬되어있지 않은 연결리스트의 중복 없애기 (0) | 2023.08.23 |
---|---|
문자열 회전 (0) | 2023.08.22 |
행렬 90도 회전 (0) | 2023.08.21 |
문자열 매칭 수 계산 (0) | 2023.08.19 |
문자열이 주어졌을 때, 이 문자열에 같은 문자가 중복되어 등장하는지 확인하는 알고리즘을 작성하라 (0) | 2023.08.17 |
댓글