NIRVANA

[level 1] 가운데 글자 가져오기 본문

Coding test(Python3)/Programmers

[level 1] 가운데 글자 가져오기

녜잉 2023. 7. 13. 14:02

문제

단어 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번째 가져오기 이런 문제가 나오면 

일단 슬라이싱부터 먼저 생각해봐야겠다.