호우동의 개발일지

Today :

[C++] 백준/BOJ - 16236 : 아기 상어
Algorithm/BOJ 2023. 3. 13. 16:56

문제 이해 단계 https://www.acmicpc.net/problem/16236 NxN 크기 맵에 상어와 물고기가 존재한다. 물고기와 상어는 각각 한 칸씩만 차지한다. 상어에는 크기, 물고기를 먹은 수의 개수 정보가 존재한다. 그리고 상어가 이동할 때는 아래의 규칙을 따른다. 1. 상어보다 크기가 작은 물고기만 먹을 수 있다. 2. 상어에게 제일 가까이 있는 물고기를 먹는다. 2-1 여러 마리가 있다면 가장 위쪽, 가장 위쪽이 여러 마리라면 가장 왼쪽 물고기를 먹는다. 3. 상어는 자신보다 큰 물고기가 있는 칸은 지나갈 수 없다. (0인 칸이나, 크기가 같은 물고기가 있는 칸은 지나갈 수 있다.) 그리고 상어가 물고기를 먹으면 생기는 일은 아래와 같다. 1. 물고기를 먹은 수가 상어의 크기와 같아지면..

[C++] 백준/BOJ - 17140 : 이차원배열과 연산
Algorithm/BOJ 2023. 3. 12. 23:44

문제 이해 단계 https://www.acmicpc.net/problem/17140 3x3 배열로 시작해서 R연산과 C연산 2가지 연산이 존재한다. 이 2가지 연산 중 한 가지 연산으로 최대 100초까지 반복한다. 행이 더 많거나 같으면 R연산, 그렇지 않으면 C연산을 한다. R연산은 같은 행에 있는 숫자들을 (숫자, 그 숫자의 개수) 쌍으로 정리해서 나타낸다. C연산은 같은 열에 있는 숫자들을 저런 쌍을 정리해서 나타낸다. 이런 상황에서 입력으로 r, c, k가 주어진다. 1초마다 저런 움직임이 계속될 때, 맵에서 map [r][c] = k가 존재하는지, 존재한다면 몇 초 만에 가능한지를 구하는 문제이다. 문제 접근 단계 최우선적으로 보이는 것부터 정리해 보자면 (숫자, 그 숫자의 개수)라는 쌍이 존재..

article thumbnail
[C++] 정렬(sort) 정렬 규칙을 직접 만드는 compare의 필요성과 사용법

정렬(sort) - compare C++에서 자주 쓰이는 기능 중, 헤더 안에 있는 sort 기능이 많이 쓰인다. 해당 함수는 벡터(vector)나 배열과 함께 사용한다. 아래는 사용법 예시이다. #include #include // sort 헤더파일 #include // 벡터 헤더파일 using namespace std; int array_size = 8; int main(){ int array[] = {4,5,2,1,5,1,74,5}; vector arr = {4,5,2,1,5,1,74,5}; sort(arr.begin(),arr.end()); sort(array,array+array_size,greater()); for(int i = 0; i < arr.size(); i++) { cout

article thumbnail
[C++] 백준/BOJ - 15685 : 드래곤 커브
Algorithm/BOJ 2023. 3. 9. 21:34

문제 이해 단계 https://www.acmicpc.net/problem/15685 설명이 좀 어렵게 되어있는 문제. 모양이 이상하고 좀 이상하게 돌린다. 세대라고 해서 결국 레벨 같은 건데, 세대가 올라갈수록 이전의 했던 모양이 시계방향으로 90도 돌아간 채로 추가된다. 그렇게 점점 좌표계에서 많아지는데, 이건 그림을 보는 것이 훨씬 편하다. 들어오는 입력 정보로는 드래곤 커브의 x좌표와 y좌표, 움직일 방향, 그리고 몇 세대인지이다. 이렇게 여러 개의 입력정보가 들어와 여러 드래건 커브를 형성할 때, 맵에서 1x1 정사각형이 총 몇 개 나오는지 구하는 문제. 문제 접근 단계 문제가 좀 많이 어지럽다. 해당 그림을 배열을 만져가며 그리기에는 무리가 있다. 드래곤 커브가 만들어지는 원리에 집중했다. 드래..

article thumbnail
[C++] 백준/BOJ - 20056 : 마법사 상어와 파이어볼
Algorithm/BOJ 2023. 3. 9. 14:26

문제 이해 단계 https://www.acmicpc.net/problem/20056 NxN인 격자에 M개의 파이어볼을 쏜다. 그리고 K번만큼 이동한다. 파이어볼은 5가지의 정보를 가지고 있는데, (x좌표, y좌표, 질량, 속력, 방향)이다. 1. 자신의 방향으로 자신의 속력만큼 움직인다. 2. 이동이 끝난 후 파이어볼이 같은 칸에 있는 것이 있다면 하위에 프로세스를 실행한다. 2 - 1. 같은 칸에 있는 파이어볼을 합한다.(질량, 속력 전부) 2 - 2. 합쳐진 파이어볼은 4개로 나뉜다. 2 - 3. 각 파이어볼의 속력은 (속력의 합/개수), 질량은 (질량의 합/5)이다. 2 - 4. 방향은 합쳐진 파이어볼의 각 방향이 모두 홀수거나 짝수면 0,2,4,6 그렇지 않으면 1,3,5,7이다. 2 - 5. 질..

article thumbnail
[C++] 백준/BOJ - 17144 : 미세먼지 안녕!
Algorithm/BOJ 2023. 3. 7. 15:59

문제 이해 단계 https://www.acmicpc.net/problem/17144 문제가 복잡하게 써져 있는데, 최대한 간략하게 요약하자면 RxC 맵에 숫자 정보들이 나와있다. 0은 빈 곳, -1은 공기 청정기, 1이상의 수는 미세먼지의 양이다. 미세먼지는 1초당 상하좌우로 자신의 미세먼지 양 /5 만큼 퍼지고 (자기 자신의 미세먼지 - 미세먼지/5 확산한 방향 개수)로 그 자리의 미세먼지 양을 수정한다. 미세먼지가 확산될 때 공기청정기 쪽으로는 확산될 수 없다. 그리고 공기청정기가 두대가 설치되어 있는데, 공기 청정기는 무조건 1행만 존재하고 위아래 두 개로 무조건 붙어있다. 공기 청정기의 위 칸은 반시계 방향으로, 아래칸은 시계 방향으로 움직인다. 미세먼지가 확산된 이후, 위에 그려진 경로에 따라 ..

article thumbnail
[C++] 백준 21277 - 짠돌이 호석
Algorithm/BOJ 2023. 3. 6. 17:24

문제 이해 단계 https://www.acmicpc.net/problem/21277 설명만 읽어보면 무슨 소리인지 전혀 모르겠다. 예제 입력과 그에 대한 해설을 보니까 어느 정도 이해되더라. 퍼즐 1과 퍼즐 2의 행과 열의 크기가 정보로 들어오고, 퍼즐 1과 퍼즐 2의 배열 상태가 입력으로 또 들어온다. 두 블록을 한 액자에 넣으려고 퍼즐 1과 퍼즐 2를 90도씩 돌려가면서 최대한 넓이를 작게 만드는 것이 목표이다. 넓이를 작게 만든다는 말은 퍼즐 1의 0으로 된 부분에 퍼즐 2의 1로 된 부분이 들어가는데, 퍼즐 1의 1 부분과 퍼즐 2의 1 부분이 서로 겹치지 않는 것이다. 이때의 이때의 나올 수 있는 최소의 넓이는 구하는 문제 문제 접근 단계 이 문제에서는 제한 사항에 큰 힌트가 있다. 퍼즐의 가로..

article thumbnail
[C++] 백준 20327 - 배열 돌리기 6
Algorithm/BOJ 2023. 3. 5. 13:30

문제 이해 단계 https://www.acmicpc.net/problem/20327 20327번: 배열 돌리기 6 크기가 2N×2N인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 8가지가 있고, 연산에는 단계 ℓ (0 ≤ ℓ 같은 부분 배열에서 상하/좌우 배열 반전 3,4번 -> 같은 부분 배..