문제https://www.acmicpc.net/problem/2470❌ 틀린 풀이import sysimport itertoolsinput = sys.stdin.readlineN = int(input())li = map(int, input().split())nCr = list(itertools.combinations(li, 2))sumArr = []for i in range(len(nCr)): sumArr.append(abs(sum(nCr[i])))minIndex = sumArr.index(min(sumArr))print(nCr[minIndex][0], nCr[minIndex][1], sep=" ") combination을 이용해 모든 경우의 수를 구하고 있다. 그래서 N이 커질수록 급격하게 조합의 ..
CodingTest
문제풀이과정처음 코드는 이중 반복문을 사용하고 있어서 시간 복잡도가 O(N*M)이 되어서 시간 초과가 뜨게 되었다.그래서 A의 각 원소 a에 대해 B중에서도 a보다 작은 수가 몇 개인지만 찾기로 했다.B를 먼저 정렬하고, bisect_left를 사용하면 a 보다 작은 수의 개수를 찾을 수 있다.import bisectB = [1, 3, 6, 7, 9]a = 6index = bisect.bisect_left(B, a)print(index) 인덱스: 0 1 2 3 4값: [1, 3, 6, 7, 9]일때,bisect.bisect_left(B, 6) 의 값은 6보다 크거나 같은 값이 등장하는 인덱스 2값을 반환한다. bisect 이진 탐색 기능을 제공하는 라이브러리이다. 코드i..
문제 코드# DFS와 BFSimport sysfrom collections import dequeinput = sys.stdin.readline# N:노드의 개수# M:간선의 개수# START:시작 노드N, M, START = map(int, input().split())visited = [False for _ in range(N+1)] # 0은 안쓰는 걸로 생각하고 (N+1)개 제작graph = [[] for _ in range(N+1)]for _ in range(M): # 간선의 개수만큼 반복하기 A, B = map(int, input().split()) graph[A].append(B) graph[B].append(A)for i in range(1, N+1): graph[i..
ORDER BY 부분에서 실수를 했다. 만들어진 TOTAL_DISTANCE 칼럼으로 정렬을 하게 된다면 현재 문자열이기 때문에문자열 기준으로 정렬하게 된다. 그렇기 때문에 새로 SUM을 통해 만들고 정렬을 해주어야 한다.❌ 틀린 풀이SELECT ROUTE,CONCAT(ROUND(SUM(D_BETWEEN_DIST),1),"km") AS TOTAL_DISTANCE, CONCAT(ROUND(AVG(D_BETWEEN_DIST),2),"km") AS AVERAGE_DISTANCEFROM SUBWAY_DISTANCEGROUP BY ROUTEORDER BY TOTAL_DISTANCE DESC✅ 정답 풀이코드SELECT ROUTE,CONCAT(ROUND(SUM(D_BETWEEN_DIST),1),"km") AS TOTA..
문제 풀이과정A->BA에서 B로 정방형으로 갈 경우, 1. 2를 곱하거나 2. 마지막에 1을 붙이는 방법 두가지이다. B->AB에서 A로 반대로 갈 경우, 1. 짝수인 경우 나누기 2, 2. 마지막에 1이 있을 경우 없애주기 이다. 그렇게 때문에 역방향이 경우의 수가 더 적기 때문에 역방향으로 생각하는 것이 더 좋다. ✅ 정답 풀이import sysinput = sys.stdin.readlineA, B = map(int, input().split())count = 1while A https://www.acmicpc.net/problem/16953
입출력입력 : input() 보다 sys 라이브러리에 있는 sys.stdin.readline()를 사용하자.A, B = map(int, input().split())input()은 위와 같이 사용될 수 있다.input()은 한 줄을 문자열로 입력받는 기본 함수줄 끝의 \n은 자동으로 제거해 준다. 단점: 속도가 느려! 입력이 빨라야 되는 부분이 있을 때 불리하다. 코딩테스트와 같은 특수한 상황일 경우 sys라이브러리를 쓰는 것이 좋다. import sysinput = sys.stdin.readlineimport sys를 통해 라이브러리를 불러오고 입력을 사용하면 된다. 속도가 빠르긴 하나 \n 줄바꿈 문자가 그대로 남아 있다.//한줄에 여러 숫자를 입력 받았을 경우 import sysinput = sys..
문제와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.제한 사항scoville의 길이는 2 이상 1,000,000 이하입니다.K는 0 이상 1,000,000,000 이하입니다.scoville의 원소는 각각 0 이상 1,000,000 이하입니다.모든 음식의 스코빌 지수를 K 이상으로..
문제문제 설명스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다.속한 노래가 많이 재생된 장르를 먼저 수록합니다.장르 내에서 많이 재생된 노래를 먼저 수록합니다.장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요.제한사항genres[i]는 고유번호가 i인 노래의 장르입니다.plays[i]는 고유번호가 i인 노래가 재생된 횟수입니다.genr..
문제문제 설명XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다.이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 있는데, 한 유저가 오늘 이 던전들..
DATE_FORMAT: H와 h 차이(15:30:00) 시간 기준%H24시간 형식00~2315%h12시간 형식01~1203%pAM/PM 표시AM/PMPM%H + 024시간 형식, 0 제거0~2315%h + 012시간 형식, 0 제거1~123✅ 한 자리 숫자의 0 제거하는 방법0을 더함으로 써 정수로 바꿔줌 이 방법 아니면 CAST를 통해 바꿔도 됨원래 03 형태를 -> 3으로 바꿔준다SELECT DATE_FORMAT(DATETIME, "%H") + 0 AS HOUR FROM ANIMAL_OUTS;SELECT CAST(DATE_FORMAT(DATETIME, "%H") AS UNSIGNED) AS HOUR FROM ANIMAL_OUTS;QUARTER()지정한 날짜의 월 정보를 기반으로 해당 날짜가 속한 분기..