일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 무료강의
- 반응형
- useState
- 장고이미지처리
- 22938번
- jquery
- 개인정보수집유효기간
- SEF2022
- React
- 프로그래머스입문
- 참가후기
- 20492번
- 프론트엔드
- error
- GIT
- ㅐㄱ이
- MongoDB
- 스파르타코딩클럽
- 프로그래머스
- 장고 다중이미지
- 스파르타
- 파이썬
- sql
- django multi image
- 네이버커넥트재단
- 코딩기초트레이닝
- css
- html
- python
- 파이썬무료강의
- Today
- Total
코딩,해볼까
07.21. 프로그래머스 : 숫자 찾기, 문자열 정렬하기(2), 머쓱이보다 키 큰 사람 본문
< 숫자 찾기 >
1. 나의 풀이
def solution(num, k):
answer = 0
if str(k) in str(num):
answer += str(num).index(str(k)) + 1
else:
answer = -1
return answer
index함수는 int는 사용을 못하므로 str으로 바꿔서 index 함수를 가지고 풀어봤다.
int에는 쓸 수 있는 함수가 어떤 것들이 있을까 궁금해서 dir(int)해봤더니, 당장은 풀만한 함수는 보이지 않는다.
Error. TypeError: 'int' object is not callable.
해당 오류가 발생한 이유는 키워드(예약어)를 변수명으로 사용 하였기 때문이다.
callable 은 함수, 클래스 인스턴스, 메서드 등이 호출 가능한지 점검하는 함수이다. 호출이 가능하면 True 의 결과값을 전달한다. 파이썬에는 callable 내장함수가 있다. 이 함수는 스폐셜 메서드인 __call__ 메서드의 존재 유무를 확인한다.
< 문자열 정렬하기 (2) >
1. 나의 풀이
def solution(my_string):
str_list = list(my_string.casefold())
str_list.sort()
return ''.join(str_list)
lower 함수도 있지만, casfold 함수도 있다.
casefold 함수도 문자열을 소문자로 변환한다. ※ casefold() 메서드가 lower()보다 문자열 일치 비교 시 효과적. (∵ casefold() 메서드가 lower()메서드보다 더 많이 소문자로 변환.) 이라고 하는데, 아직은 잘 모르겠다. 나중에 비교해볼 수 있다면 비교해보기로 했다.
lower_string = my_string.lower()
sort_string = sorted(lower_string)
return ''.join(sort_string)
# 한 줄 쓰기 가능
''.join(sorted(my_string.lower()))
sorted로 풀었던 이전 예시이다. lower함수로 소문자로 바꾼 후 sorted 함수로 정렬, join으로 리스트에 하나하나 저장된 글자들을 합쳐 문자열로 만들어준다.
< 머쓱이보다 키 큰 사람 >
1. 나의 풀이
def solution(array, height):
answer = 0
for tall in array:
if tall > height:
answer += 1
return answer
array 에 있는 키들의 값과 머쓱이의 키를 하나씩 비교하기 위해 for문 안에서 비교를 했다. 그리고 그 수를 카운트해서 결과로 도출해준다.
2. 다르게 풀어보기
큰 숫자들을 세는 것이므로 정렬을 한 다음 height가 포함될 지점을 생각해보면 되지 않을까? 라는 생각으로 팀원과 함께 for 문을 사용하지 않고 문제를 풀어보기로 했다. height를 array 안에 넣어준 다음 정렬을 해서 height 뒤에 있는 값을 세어주면 된다는 계획으로 코드를 작성해봤다.
array.append(height)
array.sort()
answer = (len(array) - array.index(height)) - 1
전체 length에서 height의 index를 빼주면 그 길이가 나와야 하는데, 통과하지 못하는 조건들이 있었다. 테스트케이스에 없는 경우까지 추가하여 실험해봤다.
- height가 array보다 작은 값일 때 (index 0번)
- array 안에 height와 같은 값이 하나 있을 때
- array 안에 height와 같은 값이 여러개 있을 때
array = [180, 120, 120, 120, 140]
height = 120
array.append(height)
array.sort()
# [120, 120, 120, 120, 140, 180]
# answer = (len(array) - array.index(height)) - 1
answer = (6 - 0) -1 # 140, 180 총 2개이나 5라는 값이 나온다.
첫 번째, 두 번째 케이스는 통과가 가능했지만 마지막 케이스가 통과되지 않았다. index는 첫 번째 원소의 위치를 찾아주기 때문이다. 그렇다면 이 숫자를 뒤집어서 큰 숫자부터 첫 번째 height까지의 index를 알아낸다면?
array.append(height)
array.sort(reverse = True)
return array.index(height)
이렇게 작성했더니 답을 잘 도출했다.
< 오늘 배운 것 >
1) for문을 쓰지 않는다고 해서 꼭 시간복잡도가 줄어드는 것은 아니다.
- 3번 문제의 다른사람들의 풀이를 봤더니, 똑같은 풀이가 있었다.
- for문은 O(n), sort는 O(nlogn) 의 시간복잡도를 가지며 데이터가 매우 적은 것이 아니라면 O(n) 이 더 빠르다고 한다.
그래도 다르게 보고, 다르게 풀어보는 시각은 계속 가져가려고 한다.
오늘의 코테 풀이도 끝!
'Back > TIL' 카테고리의 다른 글
07.24. 프로그래머스 : 이진수 더하기 (0) | 2023.07.24 |
---|---|
07.22 - 23. 프로그래머스 : 직사각형 넓이 구하기, 연속된 수의 합 (0) | 2023.07.23 |
07.20. 프로그래머스 : 대문자와 소문자, 인덱스 바꾸기, 배열의 유사도 (0) | 2023.07.21 |
07.19. 프로그래머스 : 점의 위치 구하기, 최댓값 만들기(1), 문자열 정렬하기(1), 중복된 문자 제거 (0) | 2023.07.19 |
07.17 - 18. 프로그래머스 : 배열 두 배 만들기, 배열 뒤집기, 문자열 뒤집기, 가위 바위 보 (0) | 2023.07.18 |