갱스터하우스

[Python] Lv1.가운데 글자 가져오기 본문

코테 문제/프로그래머스

[Python] Lv1.가운데 글자 가져오기

승갱 2022. 4. 8. 14:20

https://programmers.co.kr/learn/courses/30/lessons/12903

 

코딩테스트 연습 - 가운데 글자 가져오기

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret

programmers.co.kr

 

 

 

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

 

제한 사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

 

나의 접근방법 및 풀이

슬라이싱을 이용해서 풀어야겠다고 생각했다.

 

문자열의 길이가 짝수일 경우

a b c d
0 1 2 3

가운데 두 글자를 반환하며, 가운데 두 글자 중 첫번째 글자의 인덱스는 (len(s)//2)-1이며 이때 -1을 하는 이유는 인덱스가 0부터 시작하기 때문이다. 그리고 두 번째 글자의 인덱스는 슬라이싱에서 포함 하기 위해 +1을 하여 (len(s)//2)+1이다.

 

문자열의 길이가 홀수 일 경우

a b c d e
0 1 2 3 4

홀수일 경우에는 해당 문자열 길이의 몫만 가져오면 된다. len(s)//2

def solution(s):
    answer = ''
    if len(s)%2 == 0:
        answer += s[(len(s)//2)-1:(len(s)//2)+1]
    else:
        answer += s[len(s)//2]
    return answer

 

 

다른 풀이

def string_middle(str):
    return str[(len(str)-1)//2:len(str)//2+1]

start는 len(str)-1은 인덱스는 0부터 시작하니까 먼저 -1을 한다.

ex) "abcd"의 길이는 4지만 인덱스는 0~3까지니까

그리고 /2가 아니라 //2인 것은 소수점이 나올 수 있으니까 정수만 가져오기 위해서 사용한다.

end는 본래 str의 길이를 2로 나눈 정수값에 +1을 한다.

a b c d
0 1 2 3
len(str) =  4
[start : end]
len(str)-1 = 3
(len(str)-1)//2 =3//2 = 1

[start : end]
len(str)//2+1 = 4//2+1=2+1=3

[1:3] → bc

 

 

a b c d e
0 1 2 3 4

len(str) =  5
[start : end]
len(str)-1 = 4
(len(str)-1)//2 =4//2 = 2

[start : end]
len(str)//2+1 = 5//2+1=2+1=3

[2:3] → c