CS/알고리즘 51

카카오 2022 코딩테스트 '신고결과받기' 파이썬 풀이

https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 내 풀이 from collections import defaultdict def solution(id_list, report, k): answer = [0] *len(id_list) report = set(report) user_list_i_reported = defaultdict(set) num_of_reported = defaultdict(int) s..

CS/알고리즘 2022.03.10

백트래킹 알고리즘 정리(feat. 백준 15649번 파이썬 풀이)

정의 모든 가능한 경우의 수 중에서 특정한 조건을 만족하는 경우만 살펴보는 것 DFS(깊이 우선 탐색) + 특정 조건만 탐색 특징 1. 조건들을 하나씩 대입해가면서 만약 조건에 맞지 않는다면 그 즉시 중단하고 다음으로 넘어간다. 2. 상태공간트리를 DFS(깊이우선탐색)으로 탐색한다. 3. 방문 중인 노드에서 더 하위 노드로 가면 해답이 없을 경우, 해당 노드의 하위 트리를 방문하지 않고 부모 노드로 되돌아간다. 가치치기(pruning) - 유망하지 않으면(하위 노드가 답이 없을 경우) 하위 트리를 방문하지 않는 것. 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 정답풀이 #백트레킹..

CS/알고리즘 2022.03.06

백준 11651번 좌표 정렬하기 2 파이썬 풀이

문제 2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. 정답풀이1 -꽈배기처럼 x좌표와 y좌표를 직관적으로 바꾸는 코드 #좌표 정렬하기 2 #2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, # y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오. from array import array import sys N = int(input()) xy_arrays = [] #1. 값넣기 for i in range(N): x,y = map(int,sys.stdin.readline().split()) xy_arrays.append([y,x]) xy_ar..

CS/알고리즘 2022.03.03

백준 2108 통계학 파이썬 풀이

문제 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자. 산술평균 : N개의 수들의 합을 N으로 나눈 값 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 최빈값 : N개의 수들 중 가장 많이 나타나는 값 범위 : N개의 수들 중 최댓값과 최솟값의 차이 N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오. 정답풀이 #통계학 from collections import Counter import sys value_list = [] N = int(input()) for _ in range(N): #input으로 하면 시간초과 value_list.ap..

CS/알고리즘 2022.03.01

백준 10989번 수 정렬 3 파이썬 풀이(메모리 관리)

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 메모리 초과 # 수 정렬하기 3 from re import S N = int(input()) sort = [] for i in range(N): sort.append(int(input())) sort.sort() for _ in sort: print(_) 정답 코드 # 수 정렬하기 3 from re import L import sys N = int(input()) check_list = [0]*10001 for i in range(N): input_num..

CS/알고리즘 2022.02.28

백준 2750번 수 정렬하기 파이썬 풀이(삽입정렬 , 버블정렬)

문제 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 1.삽입정렬 풀이 #수 정렬하기 #시간복잡도 O(n**2)인 버블정렬,삽입정렬 등으로 풀어보자 N = int(input()) numbers = [] for i in range(N): numbers.append(int(input())) def insert_sort(x): for i in range(1,len(x)): j = i-1 key = x[i] while x[j] > key and j >= 0: x[j+1]=x[j] j = j-1 x[j+1] = key return x numbers = insert_sort(numbers) for i in numbers: print(i) 2. 버블 정렬 풀이 #수 정렬하기 #시간복잡도 ..

CS/알고리즘 2022.02.25

백준 1436번 영화감독 숌 파이썬 풀이

문제 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 숫자란 어떤 수에 6이 적어도 3개이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2..

CS/알고리즘 2022.02.24

백준 1018 체스판 다시 칠하기 파이썬 풀이

문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장이 없어서, 지민이는 8×8 크기의 체스판으로 잘라낸 후에 몇 개의 정사각형을 다시 칠해야겠다고 생각했다. 당연히 8..

CS/알고리즘 2022.02.23

백준 7568번 덩치 파이썬 풀이

백준 7568번 덩치 파이썬 풀이 문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다면 A의 덩치가 B보다 큰 셈이 된다. 그런데 서로 다른 덩치끼리 크기를 정할 수 없는 경우도 있다. 예를 들어 두 사람 C와 D의 덩치가 각각 (45, 181), (55, 173)이라면 몸무게는 D가 C보다 더 무겁고, 키는..

CS/알고리즘 2022.02.21

백준 2231번 분해합 파이썬 풀이

문제 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 출력 첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다. 정답풀이 #분해합 N = int(input()) result = 0 for i in rang..

CS/알고리즘 2022.02.21
728x90