목록전체 글 (106)
오예 !!!
이코테 p.341 연구소 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 소스코드 n과 m 입력 크기가 크지 않기 때문에 벽 3개를 세울 수 있는 모든 경우의 수를 찾을 수 있음 동작 방식 DFS를 이용하여 벽 3개를 세울 수 있는 모든 경우의 수 구하기 DFS를 이용하여 바이러스 퍼뜨리기 바이러스를 퍼뜨린 후의 안전 영역 카운트 안전 영역의 최댓값 갱신하기 # DFS를 이용하여 빈 칸에 벽 3개를 세울 수 있는 모든 경우의 수를 찾고 # DFS를 이용하여..
이코테 p.339 특정 거리의 도시 찾기 https://www.acmicpc.net/problem/18352 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net BFS 버전 소스코드 현재 노드 now와 연결된 다른 노드에 도달할 수 있으면 '현재 노드까지의 거리 + 1' 큐를 이용하여 BFS 구현 from collections import deque import sys input = sys.stdin.readline # 입력받기 n, m, k..
이코테 p.323 문자열 압축 https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 소스코드 최대 압축 단위는 주어진 문자열의 길이 // 2 그 이상부터는 압축 단위가 될 수 없음 압축 단위를 1씩 증가시키면서 압축 수행 후 결과 문자열의 길이 비교 ex) 압축 단위가 1일 때는 [a], [a], [b], [b], [c]이고, 압축 단위가 2일 때는 [a, a], [b, b] [c] def solution(s): answer = len(s) # 압축..
백준 18406번 럭키 스트레이트 https://www.acmicpc.net/problem/18406 18406번: 럭키 스트레이트 첫째 줄에 점수 N이 정수로 주어진다. (10 ≤ N ≤ 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다. www.acmicpc.net 소스코드 입력된 문자열의 중간 인덱스를 구하여 문자열의 좌, 우 각각에 대해 자릿수의 총합을 계산함 n = input() data = [] for i in range(len(n)): data.append(int(n[i])) mid_idx = (len(n) // 2) num1 = 0 num2 = 0 for i in range(0, mid_idx): num1 += data[i] num2 += data[i + mid_i..
2019 카카오 기출 - 무지의 먹방 라이브 입출력 예시 소스코드 모든 음식을 시간 기준으로 정렬한 뒤, 시간이 적게 걸리는 음식부터 제거해 나가는 방식 우선순위 큐 이용 import heapq def solution(food_times, k): # 전체 음식을 먹는 시간보다 k가 크거나 같으면 -1 if sum(food_times)
이코테 p.312 곱하기 혹은 더하기 주어진 문자열의 각 자릿수에 더하기 혹은 곱하기 연산을 하여 만들 수 있는 최댓값 구하기 입력 예시 (1) 02984 출력 예시 (1) 576 입력 예시 (2) 02084 출력 예시 (2) 64 소스코드 피연산자 중 하나가 0 or 1이면 더하기 연산이 유리하고, 그 외에는 곱하기 연산이 유리함 # 입력받기 s = input() array = [] # 문자열을 리스트로 변환 for i in range(len(s)): array.append(int(s[i])) result = array[0] # 최종 결과값 for i in range(1, len(array)): # 피연산자 중 하나가 1보다 작은 경우 더하기 연산 if result
이코테 p.311 모험가 길드 입력 예시 5 2 3 1 2 2 출력 예시 2 소스코드 그룹 수를 최대화하려면 그룹 내 인원을 최소화해야 함 공포도를 오름차순으로 정렬한 후, 가장 작은 공포도를 가진 사람부터 그룹 구성 현재의 공포도만큼 그룹에 사람 추가 현재 그룹의 사람 수가 현재의 공포도보다 크거나 같아지면 그룹 수 +1 & 그룹 초기화 # 입력 받기 n = int(input()) array = list(map(int, input().split())) # 오름차순으로 정렬 array.sort() result = 0 # 총 그룹 수 count = 0 # 현재 그룹의 사람 수 for fear in result: count += 1 # 그룹에 사람 1명 추가 if count >= fear: # 현재 그룹의 ..
이코테 p.303 실전 문제 - 커리 큘럼 입력 예시 5 10 -1 10 1 -1 4 1 -1 4 3 1 -1 3 3 -1 출력 예시 10 20 14 18 17 내 소스코드 cost_array 리스트 cost_array[i]는 i번 강의를 듣는 데 걸리는 시간 graph 리스트 graph[1] = [0, 2, 3, 4]라면 1번 노드는 2, 3, 4번 노드와 연결되어 있음을 의미 0번 인덱스의 요소는 건너뜀 위상 정렬 알고리즘 사용 indegree가 0이 될 때 q에 삽입 & result 값 갱신 result[다음 노드] = max(result[다음 노드], result[현재 노드] + cost_array[다음 노드]) 주의할 점) 아래 소스코드의 result = cost_array처럼 단순히 대입 연산..