https://www.acmicpc.net/problem/2852문제풀이전체적인 솔루션은 점수가 나는 순간, 이전에 점수 난 시점과의 시간 차이를 계산하며, 그 동안 점수가 높았던 팀에 저장하는 식으로 진행된다. 점수가 같은 경우, 시간 차이는 필요 없으므로 계산하지 않음으로써, 연산 최적화를 수행하였다. 추가적으로 신경 쓴 포인트는 다음과 같다.마지막 시간인 48분이 입력으로 들어오지 않으므로, 하드 코딩 해주어야 한다.Iteration을 N+1로 설정해주어, 마지막 Iteration에서 input() 대신 직접 "? 48:00"을 대입한다.Winner를 의미하는 ?는 다음 Iteration에서 활용하는데, 마지막 Iteration이라 활용하지 않는다. 그래서 입력 포맷을 맞춰주기 위해 아무 값이나 넣..
https://www.acmicpc.net/problem/1940 문제재료의 수 N(1 풀이고유한 수를 정렬한 후, 이중 반복문으로 두 수를 더해서 m이 되는 경우의 수를 센다. 이때, 안쪽 루프가 i+1부터 시작하므로, n*2보다는 적은 연산을 한다.#include #include using namespace std;int n, m, arr[15010], cnt = 0;int main() { cin >> n >> m; for (int i = 0; i > arr[i]; sort(arr, arr + n); for (int i = 0; i
https://www.acmicpc.net/problem/11866알고리즘 분류구현 자료구조큐n, k = map(int, input().split())n_lst = list(range(1, n+1))ans = []i = k-1while n_lst: ans.append(n_lst.pop(i)) if i == len(n_lst): i = 0 for _ in range(k-1): i += 1 if i == len(n_lst): i = 0print('')문제풀이 1부터 n까지 들어있는 리스트가 모두 사라질때까지 반복index = i 인 수를 pop()하고 정답 리스트에 append()pop()을 통해 이후 인덱스가 1씩 줄었으므로 이후 k번째 수를 제거하기 위해 i에 ..
문제풀이문자열을 입력받고 아스키 코드로 점수의 합을 구한다.띄어쓰기는 무시해야 하므로 띄어쓰기 범위의 아스키코드를 무시하도록 범위를 설정한다.코드
https://www.acmicpc.net/problem/1854문제봄캠프를 마친 김진영 조교는 여러 도시를 돌며 여행을 다닐 계획이다. 그런데 김 조교는, '느림의 미학'을 중요시하는 사람이라 항상 최단경로로만 이동하는 것은 별로 좋아하지 않는다. 하지만 너무 시간이 오래 걸리는 경로도 그리 매력적인 것만은 아니어서, 적당한 타협안인 'k번째 최단경로'를 구하길 원한다. 그를 돕기 위한 프로그램을 작성해 보자.입력첫째 줄에 n, m, k가 주어진다. (1 ≤ n ≤ 1,000, 0 ≤ m ≤ 250,000, 1 ≤ k ≤ 100, mk ≤ 3,000,000) n과 m은 각각 김 조교가 여행을 고려하고 있는 도시들의 개수와, 도시 간에 존재하는 도로의 수이다. 이어지는 m개의 줄에는 각각 도로의 정보를..
5972번: 택배 배송 (acmicpc.net)노드와 비용을 입력받고 최소 비용이 되는 길로 가야겠다import sysinput = sys.stdin.readlinesys.setrecursionlimit(10**6)import heapqn,m=map(int,input().split()) graph=[[] for _ in range(n+1)]for _ in range(m): a,b,c=map(int,input().split()) graph[a].append((b,c)) graph[b].append((a,c))INF=int(1e9)dist=[INF]*(n+1) def dijkstra(start): visit=[] q=[] heapq.heappush(q,(0, start)) ..
풀이#include #include #include #include using namespace std;int N, M;int dist[1001];vector> v[1001];int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> N >> M; while(M--) { int s, e, c; cin >> s >> e >> c; v[s].push_back({e, c}); } int start, end; cin >> start >> end; memset(dist, 127, sizeof(dist)); dist[start] = ..
https://www.acmicpc.net/problem/16435문제풀이과일의 높이들을 저장한 리스트를 오름차순으로 변경한다. 과일의 높이를 하나씩 가져와서 스네이크버드의 길이와 비교해서 만약 스네이크버드의 길이가 과일의 높이보다 크거나 같으면 스네이크버드의 길이를 1만큼 증가한다.소스코드def eat(i): global L if i == len(arr): return if arr[i]
https://www.acmicpc.net/problem/13549문제수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때 걷는다면 1초 후에 X-1 또는 X+1로 이동하게 된다. 순간이동을 하는 경우에는 0초 후에 2*X의 위치로 이동하게 된다.수빈이와 동생의 위치가 주어졌을 때, 수빈이가 동생을 찾을 수 있는 가장 빠른 시간이 몇 초 후인지 구하는 프로그램을 작성하시오. 입력첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다. 출력수빈이가 동생을 찾는 가장 빠른 시간을 출력한다. 소스코드i..
문제&링크https://www.acmicpc.net/problem/2589 풀이1. 가장 먼 두 점 사이의 거리를 구하는 문제임으로 시간 초과를 고려하여 BFS로 문제를 해결한다.2. 육지("L")로 이루어진 그래프가 여러 개 있을 수 있으므로, 모든 점을 기준으로 BFS를 구하고 거리의 최댓값을 구한다.-> 시간복잡도를 줄이기 위해서 각 그래프 별로 한 점을 잡고 두 번의 BFS를 사용하여 그래프 내의 거리의 최댓값을 구할 수 있다. (트리의 지름 활용) 3. 각 점별로 BFS를 실행할 때마다 cstring 헤더 파일의 memset 함수를 이용해서 거리(dist) 및 방문 여부(check) 배열을 초기화한다.4. BFS 함수를 통해 얻은 거리의 최댓값을 반환하도록 하여 다른 BFS 함수를 통해 얻은 거..
문제&링크https://www.acmicpc.net/problem/11279 풀이1. 우선순위 큐를 이용하여 최대 힙을 만든다.2. 0을 입력받은 순간 최대 힙이 비어있다면 0을 출력한다.3. 0을 입력받은 순간 최대 힙이 비어있지 않다면 제일 큰 값, 즉 우선 순위 큐의 top에 해당하는 값을 출력한다.4. 0이 아닌 다른 수를 입력받을 경우 최대 힙에 저장한다. 코드#include #include using namespace std;priority_queue pq;int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; for (int i = ..
https://www.acmicpc.net/problem/17249문제 풀이1. 가운데 얼굴을 기준으로 나누어 오른쪽 왼쪽 문자열로 입력받기2. 왼쪽 주먹, 오른쪽 주먹 개수를 저장할 변수 선언3. 오른쪽/왼쪽 반복하며 @(주먹) 개수 계산4. 계산 결과 출력문제 코드l, r = input().split("(^0^)")cnt_l = 0cnt_r = 0for i in range(len(l)): if l[i] == '@': cnt_l += 1for i in range(len(r)): if r[i] == '@': cnt_r += 1print(cnt_l, cnt_r)