가운데 글자 가져오기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]

2022. 10. 3. 14:44·Algorithm, 코딩테스트
728x90
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12903?language=python3

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

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

제한사항

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

입출력 예

s return
"abcde" "c"
"qwer" "we"

풀이

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

설명

경우를 s의 길이가 홀수인 경우와 짝수인 경우 2가지로 나눈다.

 

먼저 s의 길이가 홀수인 경우, s에서 (s의 길이를 2로 나눈 몫)으로 인덱싱하여 나온 문자를 반환한다.

예) 5글자인 경우, 가운데 글자의 인덱스는 2 == 5글자/2의 몫

 

s의 길이가 짝수인 경우, 슬라이싱을 이용하여 s에서 (s의 길이를 2로 나눈 몫-1)부터 (s의 길이를 2로 나눈 몫)까지의 문자열을 반환한다.

예) 4글자인 경우, 가운데 두 글자의 인덱스는 1과 2 == (4글자/2의 몫 -1)과 (4글자/2의 몫)


TIL

처음에 문제를 풀다가 다음과 같이 코드를 작성했었는데 오류가 발생했다.

def solution(s):
    if len(s)%2==1:
        return s[len(s)//2]
    else:
    # 여기까지는 위와 동일
        return s[len(s)/2-1 : len(s)/2+1] # 오류 발생!!

오류의 내용은 아래와 같았다.

TypeError: slice indices must be integers or None or have an __index__ method

찾아보니 s를 슬라이싱할 때 len(s)/2-1과 len(s)/2+1이 integer가 아니어서 슬라이싱을 할 수 없다는 것이었다. 그래서 type함수를 사용해서 두 값의 타입을 조사해봤더니 float 타입이라고 돼있었다.

's의 길이는 짝수여서 len(s)/2를 해도 integer가 나올텐데, 왜지?' 라는 생각과 함께 조사해본 결과 Python3에서는 '/' 연산자의 결과는 항상 실수라는 것을 알게 되었다.

따라서 위 풀이에서 오류가 나지 않게 하기 위해서는 맨 위에서와 같이 '/' 연산자 대신 '//' 연산자를 사용해서 값이 정수임을 보장하거나 int()를 통해 형변환을 해줘야 한다.

728x90
반응형
저작자표시 비영리 (새창열림)

'Algorithm, 코딩테스트' 카테고리의 다른 글

내적-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.03
없는 숫자 더하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.03
음양 더하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.03
제일 작은 수 제거하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.03
나누어 떨어지는 숫자 배열-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]  (0) 2022.10.03
'Algorithm, 코딩테스트' 카테고리의 다른 글
  • 내적-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
  • 없는 숫자 더하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
  • 음양 더하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
  • 제일 작은 수 제거하기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
20mini
20mini
개발 공부를 하며 알게 된 내용들을 기록한 블로그입니다. 댓글로 조언, 지적, 충고 등 다양한 의견들 항상 환영합니다!!
    반응형
    250x250
  • 20mini
    해시태그코딩 #coding
    20mini
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Python (1)
      • Algorithm, 코딩테스트 (82)
      • Machine Learning (8)
      • 논문 리뷰 (0)
      • 그 외 공부 관련 (2)
      • 기타 (1)
  • 인기 글

  • 태그

    Machine Learning
    프로그래머스
    코딩테스트
    알고리즘
    lv.3
    Python
    lv.1
    lv.2
    완전탐색
    hash
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
20mini
가운데 글자 가져오기-파이썬(Python) [프로그래머스/코딩테스트 연습/Lv.1]
상단으로

티스토리툴바