코딩테스트 6

[코딩테스트] 준비하기

작년의 코딩테스트 스터디로 여러 알고리즘을 활용했지만 이후 오랫동안 코딩테스트 문제를 안풀게 되었고 취업을 위해 코딩테스트 준비를 다시 시작하였다. 하지만 문제를 푸는데 오랜 시간이 걸리고 알고리즘이 잘 떠오르지 않는 문제가 생겼다.  ✏️ 코딩테스트 준비하기프로그래머스 문제 중 PCCP 기출문제 2번을 풀었다. BFS를 활용해야하는 문제로 BFS를 할 줄 안다면 금방 풀었겠지만 본인은 BFS를 사용하다는 걸 알기까지도 오랜 시간이 걸렸다. 이에 코딩테스트 공부방법이 잘못된 점을 깨닫고 알고리즘을 활용의 기본기부터 다져보고자한다. ✏️ 책 활용하기 책은 "프로그래머스 코딩 테스트 문제 풀이 전략 : 파이썬 편"으로 학습하고자 한다.이 책을 선택한 이유는 코딩테스트를 보는 이유부터 차근차근 문제 풀이의 흐..

코딩테스트 2024.06.27

[백준] 2630번, 색종이 만들기

✏️ 문제 💡 최종 코드 N = int(input()) color = [list(map(int, input().split())) for _ in range(N)] blue = 0 white = 0 def solution(x, y, n): global white, blue # 시작점 설정 e_color = color[x][y] # 4분할 for i in range(x, x+n): for j in range(y, y+n): if e_color != color[i][j]: solution(x, y, n // 2) solution(x+n//2, y, n//2) solution(x, y+n//2, n//2) solution(x+n// 2, y+n//2, n//2) return if e_color == 1: blu..

[백준] 11053번, 가장 긴 증가하는 부분 수열

✏️ 문제 ✏️ 아이디어 처음에는 {10, 20, 10, 30, 20, 50}의 예시로 살펴보았을 때 중복을 제거해서 문자열 길이를 재면 되는게 아닌가라고 생각했다. 하지만 그렇게 엄청 쉬운 문제는 아니였으며 문제를 다시 파악한 결과 하나를 기준으로 뒀을때 뒤의 숫자들이 증가하면 count를 올려주는 방법으로 시도해야한다. ✓ 사용 알고리즘 - DP[동적 계획법] - 사용 이유 일반적인 재귀를 단순히 사용 시 동일한 작은 문제들이 여러 번 반복되어 비효율적인 계산 - 사용 조건 1) Overlapping Subproblems (겹치는 부분 문제) : 동일한 작은 문제들 반복 2) Optimal Substructure (최적 부분 구조) : 부분 문제의 최적 결과 값을 사용해 전체 문제의 최적 결과를 낼 ..

[백준] 11758번, CCW

✏️ 문제 💬 아이디어 처음에는 위의 방식처럼 y좌표와, 기울기만 구하면 된다고 생각을 해서 단순하게 풀리는 문제가 아닌가 생각했다. 하지만 많은 경우의 수가 나타나서 공식을 찾아보게 되었다. 위와 같이 좌표로만 구하는 것이 아닌 CCW공식을 사용하는 것이다. ✏️ CCW 공식 💡 코드 p = [] for _ in range(3): p.append(list(map(int, input().split()))) def ccw(p_1, p_2, p_3): val = (p_1[0]*p_2[1] + p_2[0]*p_3[1] + p_3[0]*p_1[1]) - (p_2[0]*p_1[1] + p_3[0]*p_2[1] + p_1[0]*p_3[1]) return val result = ccw(p[0], p[1], p[2])..

[백준] 1927번, 최소 힙

💡 최소 힙 - 최소 값을 찾아내기 위해서 완전 이진 트리를 사용하여 연산을 처리하는 자료 구조 - 부모 노드가 자식 노드보다 작거나 같다 ✓ 최소 힙 직접 구현은 아래 블로그를 참고하여 학습했다. https://velog.io/@gnwjd309/python-heap [Python] 파이썬 힙(Heap) 사용하기 Heap은 어떻게 구현하나요! velog.io ✓ heapq 모듈 - 이진 트리 기반의 최소 힙 자료구조를 제공한다. - heapq 모듈은 최소 힙(min heap)의 기능만을 동작한다. - heappush() : 힙에 원소 추가 - heappop() : 힙에서 원소 삭제 💡 문제 💡 코드 import sys import heapq n = int(sys.stdin.readline()) heap ..

[프로그래머스] 신고 결과 받기

✏️ 문제 k 번 이상 신고 당한 사용자를 신고한 사용자에게 메일 보내기 ✏️ 조건 각 유저는 한 번에 한 명의 유저만 신고 가능하다 단, 신고 횟수에 제한은 없지만 동일 유저에 대한 신고 횟수는 1회로 처리된다. k번 이상 신고된 유저는 게시판 이용이 정지되고, 해당 유저를 신고한 모든 유저에게 정지 사실을 보낸다. id_list 순서에 맞추어 result(정지 사실 횟수)를 알린다. ✏️ 입출력 예시 ✏️ 아이디어 딕셔너리 사용하기 단계별 차례대로 문제 해결해보기 1) 중복 제거 '''1회 신고 적용''' report_f = set(report) # report중복 제거 동일한 유저에 대한 신고 횟수는 1회로 처리되므로 report의 중복되는 요소들을 제거해준다. 2) 신고 받은 사람 '''신고 받은..