정렬 6

[그리디] 17609 회문, 1715 카드 정렬하기

5. 17609 회문 5.1. 유형파악 Greedy 그리디 유형은 정렬과 세트로 출제된다 바로 문제 유형을 파악하기 어렵다면 그리디를 의심해볼 것 그래도 파악이 어렵다면 DP, Graph 알고리즘을 고려할 것 📌 그리디로 해법을 찾을 때는 항상 정당한 해법인지 의심해봐야 한다. 5.2. 해결과정 문자를 최대 하나 삭제할 수 있으므로 그리디 유형임을 파악. 단, 모든 문자열을 검토할 경우 시간초과 발생. 따라서 유사 회문은 투 포인터 방식으로 구현. 투 포인터로 양 끝에서 같은지 탐색 후, 다를 경우 check_pseudo() 호출. check_pseudo는 왼쪽 삭제, 오른쪽 삭제 2번 호출 왼쪽, 오른쪽 호출된 값 중 하나라도 True라면 1. 아니라면 2 반환 5.3. 소스코드 # val == val..

알고리즘 2021.09.13

프로그래머스 - H-index

🔸 문제 접근 방식 다음 방식으로 문제를 접근하였다. 논문이 인용될 최대값을 H-index로 설정한 뒤 1씩 감소시켜가며 H-index 조건을 확인한다. 인용될 최대값은 len(citations) H-index는 두 조건을 만족한다. H-index 회 이상 인용된 논문의 수가 H-index 이상이다. H-index 회 이하 인용된 논문의 수가 H-index 이하이다. H-index 의 최대값을 선택한다. 📌 문제 풀이 정렬 문제이기는 하나, H-index가 될 target값을 기준으로 citations을 분리했다. target값보다 크거나 같은 논문은 bigList에 추가 target값보다 작거나 같은 논문은 smallList에 추가 그리고 2 조건을 만족하면 H-index 그룹인 resultList에 ..

알고리즘 2021.06.17

프로그래머스 - 가장 큰 수 (정렬)

🔸 문제 해결 방향 문자열 처리를 통해 풀어야한다. 문자열 비교가 어떻기 이루어지는지 숙지할 것 문자열 곱셈을 수행한 뒤 비교한 이유는? 문자열 비교 → 숫자 변환 → 문자열 변환 후 반환 숫자로 바꾸어 주지 않을 시 발생하는 문제는? 문제 접근 리스트 정렬 기능 이용하기 처음 시도는 리스트 정렬 기능을 이용했다. 정렬 시 기준이 되는 key 값을 문자열의 첫 번째 값으로 설정했다. 첫째자리수가 가장 클 경우 앞 쪽에 배치된다. ❌ 첫째 자리 수가 같은 경우 발생 5와 50은 어떻게 비교할까? → 정렬 시 2번째 기준을 문자열 길이로 설정한다. 둘째 자리 수가 같을 경우 문자열 길이가 짧은 쪽이 앞에 배치된다. ❌ 그럼 5, 56, 3의 경우는 어떨까? → 정렬 시 2번째 기준 56, 5, 3이 되어야 ..

알고리즘 2021.06.16

백준 1920번[수찾기] 문제풀이

문제 설명 📌문제 접근 방법 처음에 간단히 생각했던 방법은 '빈 리스트에 B가 A에 있으면 1, 없으면 0을 저장하자'였습니다. 1. 빈 리스트 생성 2. B가 A에 있다면 1, 없으면 0 리턴 📌1차 오답 소스코드 import sys M = int(sys.stdin.readline().rstrip()) A = list(map(int, sys.stdin.readline().rstrip().split())) N = int(sys.stdin.readline().rstrip()) B = list(map(int, sys.stdin.readline().rstrip().split())) def solution(A, B): res = [] for x in B: if x in A: res.append(1) else: ..

알고리즘 2021.03.07

[프로그래머스] 정렬 - K번째 수

프로그래머스 정렬 문제 풀이 def solution(array, commands): # array는 0~100수 # commands는 100 x 3 answer = [] for i in range(len(commands)): start = commands[i][0] end = commands[i][1] k = commands[i][2] cut = array[start-1:end] cut.sort() answer.append(cut[k-1]) return answer 문제는 간단히 해결할 수 있었지만 다른 풀이들을 보며 배울 점이 많았습니다. 특히 map()과 lambda와 sorted()함수를 사용해 단 두 줄만에 작성한 코드도 있었습니다. lambda와 map, sorted관련해서 간단히 정리해보고 활..

알고리즘 2020.12.24

[선택정렬, 삽입정렬] - Selection Sort, Insertion Sort (Python)

선택, 삽입 정렬 특정값 index를 찾는 알고리즘 find_index() : List 안에 있는 값을 찾아서 해당 위치를 반환해주는 함수 def find_index(list_, var): res_index = -1 for i in range(len(list_)): if list_[i] == var: res_index = i break return res_index data = [24, 10, 3, 8, 33, 27, 46] print(find_index(data, 8)) Selection Sort 시간복잡도는 Worst - O(N^2), Avgerage - O(N^2), Best - O(N^2) for문을 돌며 가장 작은 값을 찾아 0번째부터 바꿔나간다. for문을 2번 돌아야 한다. i==0부터 li..

알고리즘 2020.12.23