알고리즘
-
[알고리즘][백준] 4358. 생태학알고리즘 2024. 5. 15. 17:28
문제https://www.acmicpc.net/problem/4358 문제 아이디어문제 자체는 맵에 종 별로 카운팅해서 -> 정렬 -> 출력입니다. 그런데 조건이 조금 까다로운 부분이 있습니다.# 4358. 생태학# https://www.acmicpc.net/problem/4358import sysinput = sys.stdin.readlinetrees = {}count = 0while True: tree = input().rstrip() if tree == '': break trees[tree] = trees.get(tree, 0) + 1 count += 1 sortedTree = sorted(trees)for name in sortedTree: pri..
-
[알고리즘][백준] 11501. 주식알고리즘 2024. 5. 14. 00:08
문제https://www.acmicpc.net/problem/11501 문제 아이디어1581547836 위와 같이 1, 5, 8, 15, 4, 7, 2, 3, 2 가 있다고 생각해 봅시다. 여기서 최대로 팔아먹으려면 최대한 큰 비용일 때 팔아야 되는데, 예를 들어 맨 처음 1, 5, 8 은 15일 때 가장 비싸게 팔릴 것입니다.15는 언제 팔아도 비쌀 수가 없죠. 자신이 가장 비싸거든요. 안 사는게 이득입니다.4와 7은 8일 때 가장 비싸게 팔립니다.8은 해봐야 자기 자신일 때 밖에 없습니다. 역시 안 사는게 이득입니다.3은 6일 때 가장 비싸게 팔립니다.6도 안 사는게 이득입니다.즉 주식을 산 시점부터 뒤를 탐색하면서 가장 비쌀 때 파는게 이득이라는 얘긴데, 위의 표를 보고 가장 이..
-
[알고리즘][백준] 20006. 랭킹전 대기열알고리즘 2024. 5. 10. 01:27
문제https://www.acmicpc.net/problem/20006 문제 아이디어완전한 구현 문제입니다. 플레이어의 수 p(1 ≤ p ≤ 300)와 방의 정원 m(1 ≤ m ≤ 300) 면 300 * 300으로 해도 1초를 못 넘기고, 방에 플레이어를 넣을 때마다 계속 방의 상태를 체크해주면 됩니다. p, m = list(map(int, input().split()))roomList = []for i in range(p): player = list(map(str, input().split())) level = int(player[0]) enter = False for room in roomList: if room[0] >= level - 10 and room[0]
-
[알고리즘][백준] 20310. 타노스알고리즘 2024. 5. 6. 23:36
문제https://www.acmicpc.net/problem/20310 문제 아이디어1. 사전 순으로 빠른 것2. 0과 1을 절반을 제거할 것 사전 순으로 빠르게 한다면 최대한 앞의 1은 다 제거해주어야 하니까 1은 앞에서부터 절반을 제거해 줍니다.사전 순으로 빨라야 하니까 0은 뒤에서부터 절반을 제거해 줍니다.일단 1을 앞에서부터 제거해주고, 뒤집어서 0을 앞에서부터 제거해준 다음에 다시 뒤집어서 출력해줍니다. s = list(input())zeroCount = s.count('0')oneCount = s.count('1')currZeroCount = zeroCount / 2currOneCount = oneCount / 2while currOneCount != 0: s.remove('1') ..
-
[알고리즘][백준] 13305. 주유소알고리즘 2024. 5. 3. 03:05
문제https://www.acmicpc.net/problem/13305 문제 아이디어맨 앞에서부터 탐색하면서 이전보다 더 적은 가격으로 주유를 넣을 수 있다면 해당 가격으로 주유를 넣으면 되는데, 그래도 최소한의 기름이 있긴 해야하니까 최소한의 기름만 넣으면서 이동하다가 더 싼 가격을 만나면 해당 가격으로 최대한 많이 넣고 이동하면 됩니다. (생각하기 편하게 거리는 일단 전부 2로 했습니다.) 아래와 같은 케이스가 있다고 생각합시다. 1번 도시2번 도시3번 도시4번 도시 5번 도시6번 도시7번 도시8번 도시9번 도시가격523182741거리222222222 1. 일단 처음에는 기름이 아예 없으니까 5원으로 2리터를 넣어줍니다.2. 2번 도시를 보니까 가격이 2원이네요? 이 때는 1번 도시에서 추가로 넣는..
-
[알고리즘][백준] 3758. KCPC알고리즘 2024. 5. 2. 01:32
문제https://www.acmicpc.net/problem/3758 문제 아이디어문제가 어려운 건 아닌데 잘못 읽어서 시간이 많이 걸렸습니다. 단순히 각 팀 당 각 문제 번호의 최고 점수를 합산한 것을 저장하고, 합산 점수, 제출 횟수와 시간을 기준으로 정렬하면 됩니다. T = int(input())for t in range(T): test = list(map(int, input().split(' '))) n = test[0] # 팀 개수 k = test[1] # 문제 개수 t = test[2] # 우리팀의 id m = test[3] # 문제 수 # id, 문제 번호, 점수 # 1 1 30 # 2 3 30 # 1 2 40 # 1 2 20 # 3..
-
[알고리즘][백준] 15486. 퇴사알고리즘 2024. 4. 27. 14:12
문제https://www.acmicpc.net/problem/15486 문제 아이디어12345673511242102010201540200 차근차근 생각해봅시다.1일차: 상담을 하면 3일차에 끝나게 됩니다. 그러면 4일차부터는 10의 비용이 더해지게 됩니다.2일차: 상담을 하면 7일차에 끝나게 되고, 7일차에 20의 비용을 더해줍니다.3일차: 상담을 하면 3일차에 끝나고, 3일차에 10의 비용을 더합니다. 4일차: 상담을 하면 4일차에 끝나고, 4일차에 20의 비용을 더하는데, 여기서 1일차에 끝난 비용을 더해준다면 총 30의 비용입니다. (혹은 3일차에 끝난 비용을 더해도 됩니다.)* 즉 이전 날짜까지 총 상담 기록을 봤을 때를 더해주는 느낌입니다.5일차: 상담은 7일차에 끝나고, 4일차까지의 기록을 보..
-
[알고리즘][백준] 11659. 구간 합 구하기 4알고리즘 2024. 4. 27. 10:22
문제https://www.acmicpc.net/problem/11659 문제 아이디어숫자가 100000개, 케이스가 100000개 이므로 한 케이스 당 한 사이클의 개수를 더하면 시간 초과가 날 것입니다. 따라서 말 그대로 구간 합을 구해나가면 됩니다. 5 4 3 2 1 이 있다고 한다면, 아래와 같이 구할 수 있습니다.1번째까지의 합: 5 = 52번째까지의 합: 5 + 4 = 93번째까지의 합: 5 + 4 + 3 = 124번째까지의 합: 5 + 4 + 3 + 2 = 145번째가지의 합: 5 + 4 + 3+ 2 + 1 = 15 그렇다면 이제 아래와 같이 생각할 수 있습니다.2번째부터 4번째까지의 합: 4번째까지의 합 - 1번째까지의 합 (2번, 3번, 4번의 수를 더하는 것이므로 4번까지 다 더한 다음에..