🌿Algorithm/Python 116

✏️ [백준 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

✏️ [백준 17144] 미세먼지 안녕!

1. 문제 www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 2. 접근 방법 구현, 시뮬레이션 문제라서 문제에서 제시한 대로 따라가면 된다. 크게 2개를 구현하면 된다. 1. 미세먼지 확산 2. 공기청정기 작동 3. 코드 python def clean(): global board y1, y2 = cleaner[0], cleaner[1] for y in range(y1-2, -1, -1): board[y+1][0] = board[y][0] for x in ra..

Algorithm/Python 2021.04.20

✏️ [백준 5373] 큐빙

1. 문제 www.acmicpc.net/problem/5373 5373번: 큐빙 각 테스트 케이스에 대해서 큐브를 모두 돌린 후의 윗 면의 색상을 출력한다. 첫 번째 줄에는 뒷 면과 접하는 칸의 색을 출력하고, 두 번째, 세 번째 줄은 순서대로 출력하면 된다. 흰색은 w, 노란 www.acmicpc.net 2. 접근 방법 전개도 그려서 노가다 한 문제 큐브를 일차원 리스트로 만들고, 인덱스로 면(윗면, 아랫면, 왼쪽면, 오른쪽면, 앞쪽면, 뒷쪽면)을 나눴다. 시계 방향으로 회전했을 때, 각각의 경우의 수를 생각해서 인덱스를 바꿔주는 방식으로 풀었다. 주의해야할 점은 두 가지가 있는데, 1. 해당 면을 바라 봤을 때 기준으로 시계방향, 반시계 방향 회전이다. 2. 시계방향으로 3번 돌릴 경우 == 반시계 ..

Algorithm/Python 2021.04.19