🌿All posts 199

✏️ [백준 1927] 최소 힙

1. 문제 www.acmicpc.net/problem/1927 1927번: 최소 힙 첫째 줄에 연산의 개수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 연산에 대한 정보를 나타내는 정수 x가 주어진다. 만약 x가 자연수라면 배열에 x라는 값을 넣는(추가하는) 연산이고, x가 0 www.acmicpc.net 2. 접근 방법 최소 힙을 느낄 수 있는 문제입니다. 너무 오랜만에 써서 정리할 겸사겸사 사부작사부작 적어보겠습니다. 일단 heapq모듈을 사용했습니다. heapq를 사용하면 최소 힙을 만들 수 있습니다. heapq.heappush(원소를 추가할 대상 리스트, 추가할 원소) heapq.heappush(원소를 추가할 대상 리스트, 추가할 원소) 를 사용하면 힙에 원소를 추가할 수 있..

Algorithm/Python 2021.04.22

✏️ [백준 7568] 덩치

1. 문제 www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 2. 접근 방법 조합으로 해야할거같은데 실버라서 그냥 다 확인 해봤습니다.ㅎㅋ ..귀찮 .. 3. 코드 python N = int(input()) person = [1]*N inputs = [list(map(int, input().split())) for _ in range(N)] for i in range(N): for j in range(i+1, N): if i == j: contin..

Algorithm/Python 2021.04.22

✏️ [백준 1181] 단어 정렬

1. 문제 www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 2. 접근 방법 정렬하는 문제 lambda를 잘 이용하면 된다. lambda x: (len(x), x[:]) 정렬 조건이 여러개일 경우에는 key=lambda x: (첫번째 정렬 조건, 두 번째 정렬 조건, ...) 하면 되고 reverse하고 싶으면 sort함수의 인자로 reverse=True를 넣어주면된다. 그리고 중복되는 값은 한번만 출력이라 입력받을 ㄸㅐ set을 한 번 거쳐줬다 3..

Algorithm/Python 2021.04.22

✏️ [백준 1874] 스택 수열

1. 문제 www.acmicpc.net/problem/1874 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net 2. 접근 방법 1. 인풋을 담을 리스트 2. pop, push할 숫자를 담은 range(N, 0, -1)리스트 3. stack 역할을 할 리스트 4. result를 담을 리스트 (수열을 만들 리스트) 이렇게 총 4개의 리스트가 필요하다 현재 보고 있는 숫자(stack)보다 클 경우 push하다가 원하는 숫자에서 pop..

Algorithm/Python 2021.04.22

✏️ [백준 2156] 포도주 시식

1. 문제 www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규 www.acmicpc.net 2. 접근 방법 DP입니다. 각 날짜(i일)에 마실 수 있는 와인의 양을 P[i]라고 하고 해당하는 날짜까지 마실 수 있는 와인 양의 최댓 값을 D[i]라고 한다면, 3일 연속 마시면 안되니 i번째 날은 D[i] = D[i-1]이거나 D[i] = D[i-2] + P[i] 이거나 D[i] = D[i-3] + P[i-1] + P[i-2]가 됩니다. 이 세가지 경우 중 가장 큰 것을 고르면 됩니다. 3. 코..

Algorithm/Python 2021.04.22

✏️ [백준 20061] 모노미노도미노2

1. 문제 www.acmicpc.net/problem/20061 20061번: 모노미노도미노 2 모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다. 게임에서 사용하는 좌표 (x, y)에서 x는 행, www.acmicpc.net 2. 접근 방법 파란색 보드, 초록색 보드를 만들어서 블록을 이동시켜주면 된다. 근데 여기서 파란색 보드는 가로 4, 세로 6 길이를 가지고 초록색 보드의 경우 가로 6, 세로 4이다. 이 부분을고려해서 잘 회전시킨다면 하나의 함수로 블록을 이동시킬 수 있지 않을까 라는 생각을 했다. 이 문제에서 x, y의 표현이 내가 평소에 쓰는 것과 반대여서 ㅠ 슬펐다. 여튼 그렇게 해서 잘 이동시켜주..

Algorithm/Python 2021.04.22

✏️ [백준 17837] 새로운 게임2

1. 문제 www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하 www.acmicpc.net 2. 접근 방법 시뮬이라 하라는대로만 하면 된다. ㅠㅠ 턴마다 다음과 같은 과정을 거쳐야한다. 1. 말의 갯수 만큼 말의 순서대로 이동시킨다. 1-1. 이동하려는 칸이 흰색인경우 if 해당 칸에 이미 말이 있는 경우 그 위에 얹음 (ex. DE가 이미 존재하고, ABC가 오는 상황이라면 -> DEABC) 1-2. 이동하려는 칸이 빨간색인경우 if 해당 칸에 이미 말이 있는 경우 역으로 얹음 (ex..

Algorithm/Python 2021.04.21

✏️ [백준 17142] 연구소3

1. 문제 www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 2. 접근 방법 일단 바이러스가 퍼지는거는 BFS로 했따. 그리고 바이러스 중 M개만 활성상태로 변경하기 때문에 총 바이러스 중 M개를 조합으로 뽑아내야한다. 조합으로 뽑아낸 다음 해당 바이러스들이 활성화 되었을 때 바이러스가 모두 퍼질 때까지 걸리는 시간을 구해야한다. 시간 제한이 0.5초라 시간을 어떻게 줄이느냐가 관건이다. 가지치기의 경우 현재 time이 minAns보다 클 경우와 현재 바이러스가 퍼진 ..

Algorithm/Python 2021.04.20

✏️ [백준 17140] 이차원 배열과 연산

1. 문제 www.acmicpc.net/problem/17140 2. 접근 방법 배열의 행의 갯수 >= 열의 갯수일 경우에는 R연산, 배열의 행의 갯수 < 열의 갯수일 때는 C연산을 해줘야합니다. R연산은 가로로 정렬이 진행되는 연산이고, C연산은 세로로 정렬이 진행되는 연산입니다. 저는 여기서 이렇게 생각했슴다!!! 고럼 정렬하는 거 하나만 만들어놓고 회전을 시키면 안될까?!?!?!?! 저는 그렇게 R연산만 만들어놓고 C연산은 현재 배열을 회전시킨 후 R연산을 진행하고 다시 회전시킨 모습으로 만들었씁니다. 여기까지는 어렵지 않은데여 문제는 여깁니다. a[r][c] = k가 되는 시간을 구하는 건데여 중간 과정을 거치다보면 r과 c가 배열의 범위를 벗어날 수도 있다는 말입니다. 처음에 제출했을 때 런타임..

Algorithm/Python 2021.04.20

✏️ [백준 17143] 낚시왕

1. 문제 www.acmicpc.net/problem/17143 17143번: 낚시왕 낚시왕이 상어 낚시를 하는 곳은 크기가 R×C인 격자판으로 나타낼 수 있다. 격자판의 각 칸은 (r, c)로 나타낼 수 있다. r은 행, c는 열이고, (R, C)는 아래 그림에서 가장 오른쪽 아래에 있는 칸이다. www.acmicpc.net 2. 접근 방법 문제 그대로 잘 따라가면 된다. 근데 주의해야할 것은 상어 정보 (r, c, s, d, z)에서 r은 행이고 c는 열이라는 것과 격자판 크기 R, C 또한 행, 렬 순이라는 것 그리고 r, c는 1부터 시작한다는 것 시간마다 board를 초기화 해줘서 같은 칸에 상어가 여러 마리 들어갈 경우를 생각했다. 죽은 상어를 찾으려고 처음에 상어를 크기가 큰 순서대로 정렬하..

Algorithm/Python 2021.04.20