NIRVANA
[level 1] 가운데 글자 가져오기 본문
문제
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
문제 풀이 접근법1
1) String s를 list로 변환
2) list의 길이 / 2로 중간이 되는 위치 파악
홀수: (list의 길이) // 2
짝수: (list의 길이) //2, (list의 길이 ) // 2 -1
3) 중간이 되는 곳의 글자 반환
홀수: 그냥 반환
짝수: 글자를 list에서 str형으로 바꾼 뒤 반환
def solution(s):
answer = ''
posi = []
arr = []
arr = list(s)
if len(arr) % 2 != 0:
posi = len(arr) // 2
answer = arr[posi]
else:
posi.append(arr[len(arr)//2])
posi.append(arr[len(arr)//2 -1])
arr = [i for i in arr if i in posi]
answer = ''.join(arr)
return answer
처음에 이렇게 풀었을 때 실패가 나왔다.
문자열에 중복이 없을 때는 괜찮지만, 문자열에 중복이 생기면
중간 위치에 있지는 않지만 중간 위치에 있는 문자와 같은 문자도 리스트에 포함되기 때문이었다.
문제 풀이 접근법2
def solution(s):
answer = ''
posi = []
arr = []
arr = list(s)
if len(arr) % 2 != 0:
posi = len(arr) // 2
answer = arr[posi]
else:
posi.append(len(arr)//2)
posi.append(len(arr)//2 -1)
a = posi[1]
b = posi[0]
answer = arr[a] + arr[b]
return answer
위치를 저장한 후, 위치를 기반으로 가지고 오도록 수정하였다.
다른 분들 풀이
def string_middle(str):
return str[(len(str)-1)//2 : len(str)//2 + 1]
# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(string_middle("power"))
와 배열 슬라이싱으로도 문제를 풀 수 있다니
다음번에도 문자열의 n번째 가져오기 이런 문제가 나오면
일단 슬라이싱부터 먼저 생각해봐야겠다.
'Coding test(Python3) > Programmers' 카테고리의 다른 글
[level 1] 내적 (0) | 2023.07.14 |
---|---|
[level 1] 수박수박수박수박수박수? (1) | 2023.07.13 |
[level 1] 제일 작은 수 제거하기(성공) (0) | 2023.07.12 |
[level 1] 없는 숫자 더하기 (0) | 2023.07.12 |
[level 1] 핸드폰 번호 가리기 (0) | 2023.07.11 |