Coding Test/BOJ(63)
-
[BOJ] 8938번 | 사냥꾼 (Java)
🔗문제 보러가기 Solution이분 탐색(Binary Search) 알고리즘으로 풀 수 있습니다. 사대 위치를 저장하는 배열을 오름차순으로 정렬한 뒤, 동물들의 위치를 순회하면서 `L` 사거리 내에 들어오는 사대를 찾으면 됩니다. 즉, 로직의 순서도는 다음과 같습니다. 사대 위치 배열을 오름차순으로 정렬동물들의 좌표를 순회현재 동물의 `x` 좌표와 가장 가까운 사대의 좌표를 탐색 (`y` 좌표는 고정값이기에 상수로 항상 있는 수)탐색한 사대와의 거리가 `L` 이하이면 탐색 종료잡을 수 있는 동물 수 +1하고, 다음 동물 좌표로 순회탐색한 사대와의 거리가 `L`보다 크다면, 현재 동물의 x 좌표에서 사대가 왼쪽에 있는지 오른쪽에 있는지 파악사대가 왼쪽에 있다면 `left = mid + 1`사대가 오른쪽..
2024.08.01 -
[BOJ] 2477번 | 참외밭 (Java)
🔗문제 보러가기 🧑🏻💻풀이 과정 기하학 문제는 많이 풀어보지 않아서 그런가, 생각보다 어려웠습니다. 조금만 더 생각하면 될 것 같은데 시간이 늦어 너무 피곤한 나머지 힌트를 살짝 봤네요... 기본기를 더 탄탄하게 해야겠다는 생각이 든 문제였습니다. 문제에서 나올 수 있는 참외밭의 모양은 ⌈, ⌉, ⌋, ⌊로 총 4가지입니다. 이러한 참외밭은 가로와 세로 모두 가장 긴 길이의 변이 있고, 문제에서 주어지는 정보는 항상 반시계 방향으로 주어집니다. 이것은 가로가 나왔다면 다음은 세로, 세로가 나왔다면 다음은 가로 방향이라는 것을 보장해줍니다. 이러한 정보를 토대로 생각해볼 때, 가장 긴 변의 방향이 만약 가로라면 해당 변의 전변과 후변은 세로 방향이라는 걸 알 수 있습니다. 이때, 이 전변과 후변..
2024.07.30 -
[BOJ] 20056번 | 마법사 상어와 파이어볼 (Java)
🔗문제 보러가기 🧑🏻💻풀이 과정빡구현 문제는 요구사항 별로 메서드를 잘 나눠 구현하는 게 중요하다고 생각하는데, 이렇게 해도 중간에 로직이 잘못되면 디버깅하기가 정말 어렵네요. 저는 파이어볼이 같은 위치에 있는지 파악하기 위한 2차원 Queue 배열, 현재 맵에 존재하는 파이어볼들을 관리하는 Queue 이렇게 2개를 써서 풀었습니다. 큐에서는 파이어볼 클래스 정보를 관리하구요.class FireBall { FireBall(int row, int column, int mass, int velocity, int direction) { this.row = row; this.column = column; this.mass = mass; this...
2024.07.25 -
[BOJ] 12904번 | A와 B (C++)
🔗문제 보러가기 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 👨💻풀이 과정 그리디 방식으로도 풀 수 있다고 하길래, 어떻게 하는지 궁금해서 관련 🔗힌트 글을 찾아봤습니다. 이런 생각을 할 수 있다니... 대단하네요. 세상에는 천재가 너무 많습니다. 기존 문자열인 S에서 목표로 하는 문자열 T로 변환하는 경우의 수는 너무 많은데 비해, 그 경우의 수가 다 올바른 길도 아닙니다. 그렇기에, T에서 S로 반대로 변환하는 것이 아이디어더군요. T에서 S로 변환해 나가는 과정은..
2024.03.28 -
[BOJ] 14891번 | 톱니바퀴 (C++)
🔗문제 보러가기 14891번: 톱니바퀴 첫째 줄에 1번 톱니바퀴의 상태, 둘째 줄에 2번 톱니바퀴의 상태, 셋째 줄에 3번 톱니바퀴의 상태, 넷째 줄에 4번 톱니바퀴의 상태가 주어진다. 상태는 8개의 정수로 이루어져 있고, 12시방향부터 www.acmicpc.net 👨💻풀이 과정 톱니바퀴를 시계 혹은 반시계 방향으로 회전시키는 기능과 양 옆 톱니바퀴와 맞물린 이빨의 자석 극이 서로 다를 경우, 해당 톱니바퀴들 또한 재귀적으로 회전시켜주는 것이 핵심입니다. 이걸 어떻게 구현했는지 한 단계씩 차례대로 살펴보겠습니다. 우선 1번부터 4번 톱니바퀴의 각 이빨의 극 정보를 배열에다가 저장해줍니다. #define GEARWHELL_COUNT 4 vector gearWheels(GEARWHELL_COUNT + 1)..
2024.03.24 -
[BOJ] 2636번 | 치즈 (C++)
🔗문제 보러가기 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 👨💻풀이 과정 구현 문제는 요구 사항이 많기 때문에, 구현해야 할 기능별로 함수화하여 접근하는 게 가장 좋은 것 같습니다. 이 문제에서 구현해야 할 요구사항들은 다음과 같습니다. 1. 문제에서 주어진 입력을 받는 함수 문제에서 가로 행의 개수와 세로 행의 개수, 그리고 판의 상태를 입력으로 줍니다. 이러한 내용들을 배열에 입력받되, 치즈의 개수 또한 세서 별도의 변수에 저장해주었습니다. 이 치즈의 개수가 루프 종료 조건이기 때문이죠. 2. 공기를 주변으..
2024.03.22