[프로그래머스][LV.1] 가운데 글자 가져오기 | python3

2025. 1. 17. 18:42프로그래머스/LV.1

 

문제 링크: 가운데 글자 가져오기

 

문제 설명

문제 설명

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

제한사항
- s는 길이가 1 이상, 100이하인 스트링입니다.

 


문제 풀이

문자열의 길이를 구한다. 그 다음 길이가 홀수이면 가운데 글자를 가져오는데 인덱스는 0부터 시작하기 때문에 2로 나눈 몫값이 가운데 자리 인덱스가 된다. 길이가 짝수이면 가운데 2글자를 가지고 온다. 만약 길이가 4라면 2,3번째 글자를 가지고 와야 하는데 인덱스 값으로는 1,2 이다. 즉 길이를 2로 나눈 값에 -1한 수부터 2로 나눈 값까지의 글자를 가지고 온다. 인덱스 슬라이싱으로 표현하면 [n-1:n+1]    

 

내코드

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

 

 


더보기

다른사람풀이

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

와 if문 안쓰고 하다니.. 

인덱스는 0부터 시작하니 (len(str)-1)//2를 해서 짝수는 2글자 가져올 수 있게 만든게 대단하다.

 

def string_middle(str):
    a = len(str)
    if a % 2 == 0 :
        a = (a-2) / 2
    else :
        a = (a-1) / 2
    return str[int(a) : -int(a)]

if a % 2 == 0: (짝수 처리)

  • 의도: 문자열이 짝수 길이인지 확인합니다.
  • 짝수 길이라면, 중간의 두 글자를 반환해야 하므로:
     
    a = (a - 2) / 2
    • a - 2: 문자열의 길이에서 "중간 두 글자"를 제외한 나머지 길이입니다.
    • / 2: 나머지 길이를 반으로 나누어, 슬라이싱의 시작 인덱스를 계산하려는 의도입니다.
    • 예: 문자열 "abcd"(길이 4)라면, (4 - 2) / 2 = 1.0 → 슬라이싱 범위는 [1:-1].

else: (홀수 처리)

  • 의도: 문자열이 홀수 길이인 경우, 가운데 한 글자를 반환하려고 합니다.
     
    a = (a - 1) / 2
    • a - 1: 문자열의 길이에서 가운데 글자를 기준으로 양쪽을 대칭적으로 나눌 수 있도록 조정합니다.
    • / 2: 이 나머지 길이를 반으로 나누어, 슬라이싱의 시작 인덱스를 계산하려는 의도입니다.
    • 예: 문자열 "abcde"(길이 5)라면, (5 - 1) / 2 = 2.0 → 슬라이싱 범위는 [2:-2].

return str[int(a): -int(a)]

  • 의도: 계산된 슬라이싱 범위를 사용하여 문자열의 중간 부분을 추출합니다.
    • int(a): a 값이 실수(float)로 계산되었으므로 정수로 변환합니다.
    • str[int(a): -int(a)]:
      • int(a): 슬라이싱 시작 위치.
      • -int(a): 슬라이싱 끝 위치.

str[int(a): -int(a)]:

  • int(a) 번째 인덱스부터 끝에서 int(a) 번째 인덱스 직전까지 슬라이싱합니다.
  • 결과적으로, 양쪽 끝에서 int(a) 글자씩 제외된 문자열의 "중간 부분"을 반환하게 됩니다.

 

와 슬라이싱을 이렇게 쓰는 방법은 생각도 못했다.....