목록Algorithm/Greedy (7)
영호
문제 링크 https://www.acmicpc.net/problem/2170 나의 풀이 가장 핵심 로직은 겹치는 줄 들을 어떻게 합치느냐입니다. 예제 입력 중 (1,3), (2,5), (3,5)는 (1,5)로 합칠 수 있습니다. 합쳐지는 조건 우선 주어진 입력들을 오름차순으로 정렬합니다. 첫 번째 입력 좌표를 start, end변수로 설정합니다. 두 번째 좌표부터 끝까지 탐색하며 합칠 수 있는지 살펴봅니다. 만약 i번 좌표의 시작점이 기존 좌표의 start
문제 링크 https://www.acmicpc.net/problem/15903 15903번: 카드 합체 놀이 첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1, www.acmicpc.net 나의 풀이 x번 카드와 y번 카드를 골라 그 두 장에 쓰인 수를 더한 값을 계산한다. (x ≠ y) 저는 처음에 x!= y의 뜻이 x, y가 같은 수면 안된다는 뜻인 줄 알았는데, 그게 아니라 같은 위치의 카드를 고를 수 없다는 뜻입니다. heapq를 사용하여 풀이했습니다. Code import heapq cards_num, m = map(int,i..
문제 링크 https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net 나의 풀이 이 문제는 구글링을 통해 풀이 방법을 참조했습니다. 각 알파벳들이 단어의 어느 자릿수에 위치하는지 확인하고 이를 딕셔너리에 저장합니다. ex) 'ADC'이면 A는 100, D는 10, C는 1을 딕셔너리에 'A' = 100, 'D' = 10, 'C' = 1로 저장하고, 다른 단어들에 대해서도 똑같이 각 자릿수를 딕셔너리에 더해줍니다. 알파벳들이 어느 자릿수에 위치하는지..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c5uAzA/btrE4WlgNJ4/dlHhSCHWzlGcpE88fkp2K0/img.png)
문제 링크 https://www.acmicpc.net/problem/1213 1: print("I'm Sorry Hansoo") sys.exit() answer = '' for i in range(0, len(word), 2): if word_count[word_list[i]] % 2 == 1: word_count[word_list[i]] -= 1 else: answer += word_list[i] tmp = answer[::-1] answer += odd_alphabet answer += tmp print(answer) Git https://github.com/youngh0/Algorithm/blob/master/greedy/boj_1213.py
문제 링크 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 나의 풀이 주어진 데이터 중 회의가 끝나는 시간이 빠른 회의를 기준으로 하여 회의를 시작하면 된다. sort()를 이용해 정렬을 하는데, 다중 조건을 사용해 정렬했다. 우선 회의가 끝나는 시간을 기준으로 정렬하고, 회의 시작 시간으로 정렬을 하였다. 다중 조건을 이용한 python정렬 Code # https://www.acmicpc.net/problem/1931 # 회의실 배정 meeting_nums = int(input()) meetings = [] for _ in range(meeting_nums)..
문제 링크 https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 나의 풀이 처음 잘못된 접근 문제에서 행렬을 변환하는 연산은 어떤 3 × 3 크기의 부분 행렬에 있는 모든 원소를 뒤집는 것이다. (0 → 1, 1 → 0) 이 부분을 읽지 못해 DFS로 접근하려는 생각을 했습니다. 위 조건 때문에 DFS로 접근하는 것은 잘못된 접근입니다. Greedy를 이용한 접근 정말 간단하게 행렬을 탐색하며 비교하는 행렬과 다르면 해당 위치를 기준으로 3X3 만큼 뒤집어 주면 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DYzEX/btrCgKsq2v7/R4l9UzD0wG9CE3VXlfpiLk/img.png)
문제 링크 https://www.acmicpc.net/problem/1449 나의 풀이 기본적으로 물이 새는 위치를 정렬을 한다. start, end 포인터를 사용해 물이 새는 지점을 측정하기 시작한 지점[start]과 현재 항승이 서있는 [end]지점을 비교하며 테이프를 붙일지 안붙이고 한 칸 더 갈지 고민한다. 처음, start 는 0, end는 start 다음인 1부터 시작한다. end는 물이 샌 지점들을 모아놓은 배열의 index이기 때문에 n = 4인 경우, end가 3이 되면 배열의 마지막에 온 것이기 때문에 n-1보다 작거나 같을 때 까지 반복한다. end가 n-1보다 작거나 같을 때 까지 while문을 반복한다. 3가지 경우를 생각할 수 있다. 현재 항승이 서 있는 지점과 측정을 시작한 지..