본문 바로가기

알고리즘72

[백준/파이썬] #1174 문제집에서 보고 푼 문제라 백트래킹이라는 힌트를 보고 시작했다. 그런데 암만 봐도 백트래킹으로 접근하는 방법이 생각나지 않았다. 힌트로 '브루트 포스'가 있길래 해당 방법을 시도해봤다. import sysinput = sys.stdin.readlineN = int(input())max_number = 1000000def is_decreasing(number: int) -> bool: if number // 10 == 0: return True number_string = str(number) for i in range(len(number_string)-1): if int(number_string[i]) int: if number  일단 틀렸다. 시간 초과는.. 2025. 4. 7.
[백준/파이썬] #6443 접근은 맞았다고 생각했는데 시간초과가 났다. defaultdict을 통해 set()을 순회하는 경우를 방지했고, itertools 라이브러리를 사용했기에 어디서 시간초과가 났는지 감이 잡히지 않아 풀이를 참고했다. import sysfrom collections import defaultdictfrom itertools import permutationsinput = sys.stdin.readlineN = int(input())word_list = []for _ in range(N): word = ''.join(sorted(input().replace("\n", ""))) word_list.append(word)anagrams = []anagrams_dict = defaultdict(lambd.. 2025. 4. 5.
[백준/파이썬] #11657 음수 간선이 존재한다는 걸 알자 벨만 포드 알고리즘을 써야겠다고는 생각했다. 그런데 정확히 해당 알고리즘이 어떻게 되어있는지는 기억이 잘 안 나서, 풀이는 아니지만 다른 블로그 글을 참고했다.  알고보니 설명하는 로직을 그대로 문제에 적용하면 답이 풀리더라... 뭔가 답지를 본 느낌이 들었지만 일단 내가 쓴 풀이를 가져와봤다. import sysinput = sys.stdin.readlineINF = 1e9N, M = map(int, input().split())dist = [INF] * (N+1)edges = []start = 1for _ in range(M): A, B, C = map(int, input().split()) edges.append((A, B, C))dist[start] = .. 2025. 4. 4.
[백준/파이썬] #13549 테스트 케이스는 맞았는데 틀렸다고 떴다. 30분 이상 풀어도 잘 모르겠어서 풀이를 참고했다. import sysfrom collections import dequeinput = sys.stdin.readlineN, K = map(int, input().split())visited = [False] * (100000+1)answer = 100000visited[N] = Truequeue = deque([(0, N)])if N == K: print(0)else: while queue: current_time, current_position = queue.popleft() if current_position == K: answer = min.. 2025. 4. 1.
[백준/파이썬] #22945 left, right 포인터를 양 끝단에 두고 점점 좁혀오는 방식으로 시도해봤다. 답이 틀렸다고 떴다. import sysinput = sys.stdin.readlineN = int(input())arr = list(map(int, input().split()))left, right = 0, N-1answer = 0while left = next_right: right -= 1 else: left += 1print(answer) 고려하지 못한 케이스들이 있는 것 같아 이번엔 left 포인터를 for문으로 하나씩 순회해 주었다. 이번에는 시간초과가 났다.  그 외의 다른 방법이 30분 안에 생각나지 않아서 풀이를 참고하였다. 시도했던 방법은 맞았는데, 복잡하게 다음 시행을 비.. 2025. 3. 31.
[백준/파이썬] #15961 30분 동안 시도했던 풀이는 다음과 같다. 테스트 케이스는 맞았는데 제출하니 틀렸다고 뜨더라. 예외 케이스가 처리되지 않은 것 같다. import sysfrom collections import defaultdictinput = sys.stdin.readlineN, d, k, c = map(int, input().split())sushi_arr = []for _ in range(N): element = int(input()) sushi_arr.append(element)sushi = defaultdict(lambda: 0)sushi_count = 0for i in range(k): current_sushi = sushi_arr[i] if sushi[current_sushi] == 0.. 2025. 3. 29.