danbibibi
article thumbnail
BOJ 23291번: 어항 정리

문제 문제 바로가기> BOJ 23291번: 어항 정리 23291번: 어항 정리 마법사 상어는 그동안 배운 마법을 이용해 어항을 정리하려고 한다. 어항은 정육면체 모양이고, 한 변의 길이는 모두 1이다. 상어가 가지고 있는 어항은 N개이고, 가장 처음에 어항은 일렬로 바 www.acmicpc.net 풀이 어항을 쌓는 부분을 제외한 나머지 부분의 구현은 평이한 편이다.. 다만 어항 쌓느라 1시간 넘게 쓴 것 같다 ... 어항 쌓기 규칙을 찾아주는 게 어려웠다 ... 조금 .... 많이 ... 💡 어항 쌓기 규칙 총 5가지 변수를 이용해서 규칙을 찾았다. cnt : 그냥 1, 2, 3, 4, ... monotonic 하게 증가 idx : cnt가 짝수인 경우 1 증가한다. pivot이 증가할 때 pivot+=..

article thumbnail
BOJ 23289번: 온풍기 안녕!

문제 문제 바로가기> BOJ 23289번: 온풍기 안녕! 23289번: 온풍기 안녕! 유난히 추운 날씨가 예상되는 이번 겨울을 대비하기 위해 구사과는 온풍기를 설치하려고 한다. 온풍기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기 www.acmicpc.net 풀이 벽을 고려해야해서,, 온풍기에서 바람이 나오는 부분을 구현하는 게 힘들었다 ,, 다음과 같은 규칙성을 가진다!! 규칙성이 필요한 BFS 였다,, ("같은 온풍기에서 나온 바람이 여러 번 도착"해도 온도를 여러번 상승시키지 않기 위해 visited 배열을 이용해주었다.) 벽은 4차원 배열을 이용해서 그 정보를 저장해주었다!! (코드 input 함수 참조) 비록 시간은 엄청 오래 걸렸지만 .... 2~3시..

article thumbnail
SWEA 2382번: 미생물 격리
문제 풀이/SWEA 2023. 4. 3. 16:17

문제 문제 바로가기> SWEA 2382번: 미생물 격리 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 .... 정말... 국어를 잘해야한다. 주의할 점 1. 군집이 동시에 움직인다. 처음에 번호순서대로 움직여서 답이 이상하게 나왔다 ^^,, 이를 위해 tmpMap 배열을 이용해주었다! 2. "이동 후 두 개 이상의 군집이 한 셀에 모이는 경우 군집들이 합쳐지게 된다." 이 부분에서 구현 실수가 있었다. 예를 들어 군집 A=3, B=4, C=5라고 해보자. A, B, C 순서로 동일 칸에 도착했을 때, C의 방향이 해당 군집의 방향이 되어야 한다. 그런데 만약 A < B 이니까, B의 크기를 7 로 저장을..

article thumbnail
BOJ 17822번: 원판 돌리기

문제 문제 바로가기> BOJ 17822번: 원판 돌리기 17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 풀이 원판을 2차원 배열로 입력받아서 시뮬레이션을 진행하는 문제였다. 처음에 시간을 절약하기 위해 M/2 < k 인 경우 반대 방향으로 M-k만큼 돌려주었고, sum, cnt 변수를 전역 변수로 가지고 있는 방식을 이용했다. 하지만, 이러한 부분을 빼고 그때그때 sum과 cnt를 가져오는 함수를 만들도록 코드를 변경하면, 코드가 더 깔끔해질 것 같았고, 시간 초과가 발생할 시간 복잡도도 아니어..

article thumbnail
BOJ 17825번: 주사위 윷놀이

문제 문제 바로가기> BOJ 17825번: 주사위 윷놀이 17825번: 주사위 윷놀이 주사위 윷놀이는 다음과 같은 게임판에서 하는 게임이다. 처음에는 시작 칸에 말 4개가 있다. 말은 게임판에 그려진 화살표의 방향대로만 이동할 수 있다. 말이 파란색 칸에서 이동을 시작하면 www.acmicpc.net 풀이 각 칸에서 이동해야하는 다음칸, 점수를 저장해 두어야 하는데, 이 때 약간의 노가다 작업?이 필요하다. 그 외에는 단순 백트래킹 문제이다 ! 💡 문제 해결 Point 처음에 파란지점 때문에 2차원 배열([이동칸][현위치] = 다음위치)을 만들어서 바로 이동하게 하려고 했는데, 이렇게 하는 경우, 너무 많은 노가다 작업이 필요했다,, 개인적으로, blueP 지점을 별도 배열로 가지고 있는 부분이 중요한 ..

article thumbnail
BOJ 21611번: 마법사 상어와 블리자드

문제 문제 바로가기> BOJ 21611번: 마법사 상어와 블리자드 21611번: 마법사 상어와 블리자드 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그, 비바라기 마법을 할 수 있다. 오늘 새로 배운 마법은 블리자드이고, 크기가 N×N인 격자에서 연습하려고 한다. N은 항상 홀수이고, ( www.acmicpc.net 풀이 문제에서 요구하는 각 스텝의 구현이 모두 비슷해서 구현이 어렵지는 않은 문제였다. 다만... 모든 반례가 통과하는데, 왜 자꾸 75%에서 틀리지,, 라고 생각했는데... 바로 `if(x==0) break; ` 부분을 넣어주지 않았기 때문 ... x=0 이 되는 시점에서는 어떠한 처리도 할 필요없고, 해서도 안된다,,,!!!!!! 🥲 이 처리를 해주지 않으면, change_ma..

article thumbnail
BOJ 20056번: 마법사 상어와 파이어볼

문제 문제 바로가기> BOJ 20056번: 마법사 상어와 파이어볼 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 풀이 주의할점 1. 파이어볼이 나눠진 후, 방향이 변화되어 제자리에 담긴다. 이동 x 2. 인덱스 `-`가 되지 않도록, N*s를 더해 준다. → 어짜피 modulo 하면 사라짐 #include #include #define MAX 51 using namespace std; struct FIREBALL { int m, s, d; }; vector map[MAX..

article thumbnail
BOJ 12100번: 2048 (Easy)

문제 문제 바로가기> BOJ 12100번: 2048 (Easy) 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 풀이 블록이 이동하는 순서를 미리 정해 놓은 뒤 시뮬레이션 해보는 문제다. 블록을 합칠 때, vector를 이용하면 좀 더 쉽게 문제를 해결할 수 있다. C++ #include #include #define MAX 21 #define CNT 5 using namespace std; int N, ans=0; int dir[CNT]; vector tmp; int map[MAX..

article thumbnail
BOJ 17837번: 새로운 게임 2

문제 문제 바로가기> BOJ 17837번: 새로운 게임 2 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하 www.acmicpc.net 풀이 문제에서 요구하는 조건대로 구현해주었다. 원판을 업을 수 있으므로, 2차원 배열의 각 칸을 vector 또는 ArrayList로 관리한다! 주의할 점은, 움직인 후 바뀐 좌표 업데이트 잘해주기?! 정도인 것 같다 C++ #include #include #define MAX 13 #define WHITE 0 #define RED 1 #define BLUE 2 using namespace std; s..

article thumbnail
BOJ 17779번: 게리맨더링 2

문제 문제 바로가기> BOJ 17779번: 게리맨더링 2 17779번: 게리맨더링 2 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름 www.acmicpc.net 풀이 얼핏 보면 조건이 굉장히 까다로워 보이지만,, 사실 문제에서 경계의 범위를 다 주고 있기 때문에,, 그대로 조건식만 넣어주면 된다! 사실 개꿀인 ㅎ 나름 중요한 포인트? 가 있다면, 5번 구역의 경계를 먼저 설정해 두고, 그 경계만 침범?하지 않도록 해주면 된다! 이 후 `모든 인구 수 - 1,2,3,4 지역 인구` 를 해주면 5번 구역 인구도 쉽게 구할 수 있다!! 아무래도 그림으로 보면 이해가 더 쉬울 ..

article thumbnail
BOJ 17140번: 이차원 배열과 연산

문제 문제 바로가기> BOJ 17140번: 이차원 배열과 연산 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 1. rnum(행개수) , cnum(열 개수) 변수를 이용하여 어떤 연산을 해야하는지 파악한다. * R 연산을 할 때 -> cnum 이 update * C 연산을 할 때 -> rnum 이 update 2. (등장 횟수, 숫자)를 조건에 맞게 정렬하기 위해, DATA 구조체 내에서 비교 연산자를 재정의한다. * java의 경우 Data class를 만들고, Comparable 인터페이스..

article thumbnail
BOJ 16235번: 나무 재테크

문제 문제 바로가기> BOJ 16235번: 나무 재테크 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net 풀이 C++ 나이가 어린 나무부터 양분을 먹기 위해서 priorityQueue가 아닌, deque에 앞에 새로 번식한 나무를 넣어주는 방식으로 문제를 풀었다. 초기 입력 위치는 모두 다르고, 나이는 1씩 증가하므로, 이렇게 하면 정렬할 필요가 없어져서 시간 초과를 방지할 수 있다! #include #include #define MAX 11 using namespace std; int N, M,..

article thumbnail
BOJ 16234번: 인구 이동

문제 문제 바로가기> BOJ 16234번: 인구이동 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 풀이 문제의 요구사항을 구현해주면 되는 간단한 문제였다. 1. 연합을 구하기 위해 그래프 탐색 (DFS or BFS) 진행 2. 연합의 크기 > 1 인 경우, 인구 이동 연합의 크기 < 1 인경우, break ; 정답 출력 크게 위와 같은 2가지 과정으로 이루어지는데, 연합을 구하기 위해 DFS를 사용했을 때가 BFS를 사용했을 때 보다 시간이 훨씬 줄어들었다. 그 이유를 찾아보니 ... DFS함수..

article thumbnail
BOJ 15685번: 드래곤 커브

문제 문제 바로가기> BOJ 15685번: 드래곤 커브 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커 www.acmicpc.net 풀이 드래곤 커브를 살펴보면, 규칙이 있는데, 다음 세대에 추가되는 선분의 방향 = `(이전 세대의 방향 정보를 역순 탐색 + 1) % 4` 를 한 것이 된다. 따라서 해당 규칙에 맞추어서 구현해주었다! 주의할 점은 역순으로 꺼내서 이어 붙어줘야 하는 것인데, 이 부분은 예제를 살펴보면 쉽게 이해할 수 있을 것 같다. C++ #include #include #define MAX 10..

article thumbnail
BOJ 17135번: 캐슬 디펜스
문제 풀이/백준 2023. 1. 27. 19:30

문제 문제 바로가기> BOJ 17135번: 캐슬 디펜스 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 풀이 1. 조합을 구현하여 궁수의 위치를 선정한다. (`solution() 함수`) 2. 정해진 궁수의 위치를 기반으로, 다음을 과정을 반복한다. 궁수의 적 공격 - 공격할 적의 우선순위를 구하기 위해 , pq에서 사용할 ATTACK 구조체 내에서 bool operator를 재정의해주었다. - 모든 궁수는 동시에 공격하므로, 공격 위치를 vector에 넣어두었다가 한 번에 공격해주었다. (이때, 이미 제거한 적을 또 c..