이 문제에서도 좌측 상단에 시간 제한 2초가 눈에 띤다.앞서 배웠던 sys 모듈로 한꺼번에 N+M개의 줄을 입력 받은 후에 for 문으로 처리해야 할 것이다. 첫 번째 코드import sysinput = sys.stdin.readword = input().splitlines()N, M = map(int, word[0].split())S = word[1:N+1]mlst = word[N+1 : N+1+M]num = 0for i in range(M): temp = mlst[i] for j in range(M): if S[j] in temp : num+=1print(num)이건 시도했었던 첫 번째 코드인데, 아래 for문에서 indexerror로 실패했던 코드이다. ..
백준
브루트포스 알고리즘 문제이다. 사실 처음에는 문제를 단순하게 봐서 그냥 N666 의 형태로 출력되는 거 아닌가? 실버치고 너무 쉬운데? 하고다음과 같이 코드를 짰다가, 예시 중 187로 테스트해보니 아니었음을 깨달았다..N = int(input())print((N-1)*1000 + 666) 무튼 이 원리를 잘 이해하기 위해 다음과 같이 숫자를 일일이 적어 나열해보았다!0666 1666 2666 3666 4666 56666660 6661 6662 6663 6664 6665 6666 6667 6668 66697666 8666 9666 10666 11666 12666 13666 14666 15666 16660 16661 16662 16663 16664 16665 1666617666 18666 19666 206..
남아있는 일 수와 이익끼리의 조합 중 조건에 맞는 조합쌍을 찾고, 그 중에서 이익 합계가 최대가 되도록 하는 쌍을 선택하는 브루트포스 알고리즘 문제이다. N = int(input())T = [0] * NP = [0] * Nfor i in range(N): T[i], P[i] = map(int, input().split())# 퇴사 이후까지 기간이 넘어가는 것들부터 삭제for i in range(N-1, -1, -1): if (N-i T와 P를 각각 N개의 원소를 가진 리스트로 생성하여 순서대로 입력받았고,그 다음에 퇴사 이후까지 기간이 넘어가는 일정을 삭제하기 위해 마지막 일정부터 역으로 거슬러 올라가면서 기간이 초과되는 일정의 T와 P 원소를 pop 해주었다.이렇게 상담이 가능한 일정들에 ..
이 문제는 알고보면 쉬운 문제지만, 문제의 설명 자체가 너무 부실하고 이상해서 애를 먹었던 문제다...문제 설명만 보면 골드가 아깝지 않을 정도로 전혀 이해가 되지 않아 나와 같은 처지의 사람들이 모인 질문 게시판의 답변을 들락거리면서 간신히 이해했다.(백준 자체에 좀 설명이 이상한 문제들이 꽤 있는 듯 함...) 내가 작성해본 예시로 간단히 설명해보겠다. 만약 X = 10을 입력한 경우, 합계와 자른 막대기들의 구성이 다음과 같은 과정으로 변하게 됨64 sum: 64 lst: [64]-> 32 sum: 32 lst: [32]-> 16 sum: 16 lst: [16]-> 8 / 8 sum: 16 lst: [8, 8]-> 8 / 4 sum: 16 lst: [8, 4..
입력할 내용들이 꽤 많아서 각각의 용도에 따라 그에 맞는 자료구조들을 각각 생성했다. N, M = map(int, input().split())score = list(map(int, input().split()))arr = [[0]*(N+1) for _ in range(M)] # M개의 행 N+1 개의 열profile = {} # 학번과 점수 기록for i in range(M): num = 0 arr[i] = input().split() # arr[0] = [1, O, X, X, X] for j in range(N+1): if j!=0 and arr[i][j] == 'O': num += score[j-1] profile[arr[i][0]] = nummax_value = ..
처음에 사람들마다 각각 인출하는데 걸리는 시간이 할당되어 있길래 위상 정렬같은 문제인 줄 알았는데, 막상 풀어보니 그냥 배열만 사용하면 되는 실버 4치고 매우 쉬운...문제였다. N = int(input()) # 5time = sorted(list(map(int, input().split()))) # 3 1 4 3 2 -> 1 2 3 3 4sum = 0temp = 0arr = [0]*Nfor i in range(N): arr[i] += (time[i] + temp) temp = arr[i] sum += arr[i]print(sum) 먼저 사람의 수인 N을 입력 받고, time 리스트를 숏코딩으로 사람들 각각의 시간을 입력한 뒤 최솟값을 구해야 하기 때문에 리스트를 오름차순으로 정렬해준다...