문제 본문
https://programmers.co.kr/learn/courses/30/lessons/12903?language=python3
문제 풀이
1. 첫번째 풀이
엣날에 잠깐 겉핥기식으로 python을 공부했었어서 따로 찾아보지 않고 기억을 더듬어 작성해본 코드이다.
- 문자열s의 길이를 2로 나눈 값을 middle에 넣어주었다. -> 가운데 인덱스
- 만약 문자열s의 길이가 홀수 이면, s의 middle번째 인덱스에 있는 값 answer에 넣어주기.
- 짝수면, middle-1부터 middle까지( [middle-1:middle+1] ) 있는 값 answet에 넣어주기.
❗️Error & Why 🤔
middle을 int로 형변환을 안해줘서 오류가 났어서 고쳐주었다. (왜 형변화이 필요하지.. 했는데 3번째 풀이에서 깨달음)
def str_middle_1(s):
middle = int(len(s) / 2)
if len(s) % 2 != 0:
answer = s[middle]
else:
answer = s[middle-1:middle+1]
return answer
2. 두번째 풀이
첫번째 풀이가 마음에 안들어 고치던 중, 가운데 글자를 가져오는 과정이 마치 데칼코마니처럼 문자열을 반으로 접어 접히는 부분의 인덱스만 가져오면 되겠다는 생각이 들었다. 그래서 작성한 코드
❗️Error & Why 🤔
얘는 왜 형변환을 안해도 되지.. (얘도 3번째 풀이에서 깨달음)
def str_middle_2(s):
middle = len(s)
if middle % 2 == 0:
middle = (middle - 2) / 2
else:
middle = (middle - 1) / 2
return s[int(middle):-int(middle)]
3. 세번째 풀이
뭔가 한줄로 풀 수 풀 수 있을 것 같아서 다시 고민...
파이썬의 산술연산자를 찾아보았다.
swift에서는 '/' 와 '%'만 사용했었는데, '//' 연산자라는게 있었다..
바로 세가지 연산자 비교 실습 ㄱㄱ..
💡A-Ha
- '/'는 진짜 나눗셈 결과를 리턴해주는 구나.. 그래서 1번째 풀이에서 형변환을 해줘야했고 2번에서는 형변환없이도 되었다는 것을 깨달음..(swift에 익숙해진 결과물)
- swift에서 '/' 와 파이썬에서 '//'가 같은 역할 메모메모
그걸 사용한 결과...
def str_middle_3(s):
return s[(len(s)-1)//2:len(s)//2+1]
끝!
오랜만에 하니까 재밌네..아직 쉬워서 그런가??ㅎㅎ
반응형
'Python' 카테고리의 다른 글
[ 프로그래머스 ] 거리두기 확인하기 - python (0) | 2022.02.11 |
---|---|
DFS / BFS 예제 구현해보기 - python (2) | 2021.08.13 |
Python 공부 시작! (0) | 2021.07.18 |