알고리즘
-
[알고리즘][백준] 2607. 비슷한 단어알고리즘 2024. 4. 25. 02:25
문제https://www.acmicpc.net/problem/2607 문제 아이디어사실 단어 개수는 100개, 길이는 10개라 완전 탐색이면 충분합니다.리스트 하나를 돌면서 같은 단어가 있으면 하나씩 빼주고, 남는 것끼리만 비교해주면 됩니다.예를 들어,GOOOODF / GOCOOOAOOEOD GOOOODF를 기준으로 탐색해줍니다.0번째: G를 각각 빼줍니다 -> OOOODF / OOOOOOOD1번째: O를 각각 빼줍니다. -> OOODF / COOOAOOEOD... 각각 O, O, O, D가 있으므로 양쪽에서 빼줍니다. -> F / CAOOEO 이러면 각각 F와 CAOOEO가 있는데, F -> C 로 치환한다고 해도, 아직 AOOEO를 추가해야 같은 문자가 됩니다.결국 CAOOEO와 F 중에서 더 긴 문..
-
[알고리즘][백준] 14719. 빗물알고리즘 2024. 4. 22. 23:39
문제https://www.acmicpc.net/problem/14719 문제 아이디어 1처음엔 스택 기반의 문제인 줄 알았습니다. 가장 왼쪽부터 탐색하면서, 왼쪽보다 높은 기둥을 만나면 지금까지 스택에 넣었던 걸 하나씩 꺼내면서 높이를 계산해주고, 가장 왼쪽 기준을 다시 업데이트해주면 될 것이라고 생각했습니다.예)3 1 2 3 4 1 1 2 가 있다면,3을 저장해놓고 다음 3을 만날 때까지 스택에 저장해두고,3, [1, 2], 3 에서 1 과 2의 높이에 따라 물의 양을 계산해주면 될 것으로 생각했습니다. 또한 만약 가장 왼쪽 기준 (위에서는 연산을 다 끝낸 후 4부터 시작) 보다 높거나 같은 기둥이 안 나오면 나머지는 다 빼서 나머지 계산을 하면 될 것이라 생각했습니다.예)4 [1 1 2..
-
[알고리즘][백준] 2493. 탑알고리즘 2024. 4. 20. 00:05
문제https://www.acmicpc.net/problem/2493 문제 아이디어 1: 처음부터 탐색처음엔 왼쪽부터 탐색하면서 자기보다 낮은 탑을 만나면 자신의 포지션으로 업데이트하고 다음 것을 찾게 했습니다. ex) 6 9 5 7 4 에서6에 대하여 [9, 5, 7, 4] -> [9는 통과, 5는 부딪힘, 7은 통과, 4는 부딪힘] -> [0, 1, 0, 1]9에 대하여 [5, 7, 4] -> [5는 부딪힘, 7은 부딪힘, 4는 부딪힘] -> [0, 2, 2, 2]5에 대하여 [7, 4] -> [7은 통과, 4는 부딪힘] -> [0, 2, 2, 3]7에 대하여 [4] -> [4는 부딪힘] -> [0, 2, 2, 4] ... 시간 초과가 발생했습니다. 그래서 방법을 달리 했습니다. 문제 아이디어 2:..
-
[알고리즘][백준] 9017. 크로스 컨트리알고리즘 2024. 4. 18. 04:17
문제https://www.acmicpc.net/problem/9017 해결 아이디어조건이 은근 까다로운데,한 팀에 최소 6명. 6명 안되면 탈락등수가 곧 점수. 팀별 점수 합산이 낮을 수록 유리한 것동점이면 5번째 주자 점수가 낮은 쪽이 승리그래서 아래와 같은 방식으로 풀었습니다.일단 카운팅부터 해서 6명 안되는 팀은 리스트에서 다 빼버렸습니다.빼버린 리스트를 다시 돌면서 팀별로 카운팅하면서 4명까지만 합산하고, 5번째 선수에 대한 정보는 따로 저장했습니다.맵 전체를 돌면서 점수를 기준으로 순위를 정하고, 동점이면 5번째 선수 저장한 곳에서 빼서 비교해줬습니다. N = int(input())for i in range(N): T = int(input()) ..
-
[알고리즘][백준] 20920. 영단어 암기는 괴로워알고리즘 2024. 4. 17. 02:43
문제https://www.acmicpc.net/problem/20920 # 자주 나오는 단어일수록 앞에 배치한다.# 해당 단어의 길이가 길수록 앞에 배치한다.# 알파벳 사전 순으로 앞에 있는 단어일수록 앞에 배치한다import sysinput = sys.stdin.readlineN, M = map(int, input().rstrip().split())words = {}for _ in range(N): word = input().rstrip() if (len(word) sorted(words.items(), key = lambda x : (-x[1], -len(x[0]), x[0]))sorted 메서드에 key = labmda x를 넣으면, x를 기준으로 원..