profile
Hello, Devs!
post-thumbnail

[ 백준 ] 2504 괄호의 값

📌 Problem 소괄호와 대괄호로 이루어진 문자열이 주어진다. 소괄호와 대괄호는 다음과 같이 변환이 가능하다. 예를 들어서 (()[[]]) = 2 x (2 + 3 x 3) = 22 으로 변환이 가능하다. 또한 괄호 문자열은 순서쌍이 맞아야 한다. 순서쌍이 맞지 않으면 0을 출력하고 순서쌍이 맞으면 계산된 정수를 출력하면 된다. 📌 Solution 올바른 순서쌍 우선 올바른 괄호 순서쌍인지는 Stack을 사용한다. 여는 괄호는 Stack에 push하며 닫는 괄호는 Stack의 top에 있는 괄호와 비교한다. 만약 Stack이 비어 있거나 쌍이 맞지 않으면 ("()" or "[]") 0을 출력한다. 정수 변환 변수 하나를 1로 초기화하고 괄호들을 차례대로 탐색한다. 여는 괄호가 나왔을 때 소괄호는 2를 대괄호는 3을 곱한다. 닫는 괄호가 나왔을 때는 변수값을 결과값에 더하고 소

2023년 8월 14일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 3107 IPv6

📌 Problem 축약되지 않은 IPv6주소는 32자리의 16진수 숫자를 4자리씩 끊어서 표현된다. 이때 4자리마다 :으로 구분된다. 예를 들어 2001:0db8:85a3:0000:0000:8a2e:0370:7334 으로 표현된다. 이때 각 4자리에서 앞선 0은 생략될 수 있다. 0db8은 db8으로 축약될 수 있다. 연속된 0은 ::으로 표현될 수 있다. 예를 들어 0000:0000:0000:1111:1111:1111:0001:0011은 ::1111:1111:1111:1:1으로 표현될 수 있다. 하지만 ::은 한 번만 사용할 수 있다. 입력으로 축약된 IPv6 주소가 주어질 때 축약되지 않은 주소를 출력하면 된다. 📌 Solution 주어진 입력을 4가지 경우로 나누어서 생각할 수 있다. ::인 경우 ::가 앞에 나온 경우 ::가 뒤에 나온 경우 ::가 중간에 나온 경우로 생각할 수 있다.

2023년 8월 5일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 2116 주사위 쌓기

📌 Problem 1부터 6까지의 눈이 있는 N개의 주사위가 주어진다. 각각의 주사위가 가지는 눈의 위치는 서로 다를 수 있다. N개의 주사위를 하나의 탑으로 쌓는데 이 때 겹치는 면의 숫자는 같아야 한다. 즉, 아래 주사위의 위쪽 숫자가 4이면 위쪽 주사위의 아래 숫자도 4여야 한다. 각각의 주사위의 옆면 중 최댓값들을 더한 수가 최대가 되도록 할 때의 최댓값을 구하여라. 주사위의 육면은 다음과 같다. 입력은 첫 번째 줄에 N을 두 번째 줄에 A, B, C, D, E, F에 해당하는 숫자가 공백으로 구분되어 순서대로 주어진다. 📌 Solution 맨 아래의 주사위를 할당하면 나머지 주사위는 맞닿는 면의 숫자가 동일하도록

2023년 7월 24일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 16935 배열 돌리기 3

📌 Problem 주어진 N x M 크기의 정수 배열을 명령 순서대로 변환시킨 최종 형태를 반환하면 된다. 명령은 1 ~ 6으로 총 6가지이다. 각각의 명령은 다음과 같다. 배열을 수직으로 뒤집는다. Ex) (0, 0)은 (N - 1, 0)이 된다. 배열을 수평으로 뒤집는다. Ex) (0, 0)은 (0, M - 1)이 된다. 배열의 중심을 기준으로 +90° 회전시킨다. Ex) (0, 0)은 (0, N - 1)이 된다. 배열의 중심을 기준으로 -90° 회전시킨다. Ex) (0, 0)은 (M - 1, 0)이 된다. 배열의 각 구역들을 시계방향으로 평행이동 한다. (1 - 2 - 3 - 4 - 1) 배열의 각 구역들을 반시계방향으로 평행이동 한다. (1 - 4 - 3 - 2 - 1) 배열의 구역은 배열을 일정한 크기로 4등분 하였을 때 다음과 같은 형태로 구역이 나뉜다.

2023년 7월 18일
·
1개의 댓글
·
post-thumbnail

[ 백준 ] 9205 맥주 마시면서 걸어가기

📌 Problem 송도는 x와 y 좌표로 이루어진 곳이다. 한 지점에서 이동할 수 있는 다른 지점의 최대 거리는 1000이다. 그 이상의 거리에 있는 지점은 한 번에 갈 수 없다. 각 지점에 도착할 때마다 이동할 수 있는 거리는 초기화되어 다시 1000을 이동할 수 있다. 시작 지점, 도착 지점, 중간 지점들이 주어 졌을 때 시작 지점에서 도착 지점으로 갈 수 있는지를 판단하면 된다. 참고로 지점 사이의 거리는 x 좌표의 차이 + y 좌표의 차이이다. 📌 Solution BFS으로 해결할 수 있다. 시작 지점에서 1000 이하에 있는 지점들이 다음으로 이동할 수 있는 지점들이다. 또한 한 번 방문한 지점은 이후에 다시 방문할 필요가 없다. 만약 다음으로 이동할 수 있는 지점이 도착 지점이라면 시작 지점에서 도착 지점으로 이동할 수 있는 것이다. 📌 [Code](https://gith

2023년 7월 17일
·
1개의 댓글
·
post-thumbnail

[ 백준 ] 9084 동전

📌 Problem N개의 서로 다른 가치의 동전들이 오름차순으로 주어진다. 목표한 금액을 주어진 동전들을 사용하여 만들 수 있는 경우의 수를 구하면 된다. 동전들은 중복으로 사용할 수 있으나 순서와 상관없이 동일한 구성이면 같은 경우로 생각한다. 배낭문제를 통해 해결할 수 있다. 📌 Code

2023년 7월 17일
·
1개의 댓글
·
post-thumbnail

[ 백준 ] 21775 가희와 자원 놀이

📌 Problem N명의 친구들이 자원 놀이를 한다. 자원 놀이는 주어진 순서에 따라 자신의 차례가 되면 하나의 카드를 수행하며 자원을 모으는 것이다. 카드의 종류는 다음과 같이 있다. 자원은 1번부터 2,000,000,000번까지 하나씩 존재한다. 참가자들은 자신의 차례가 되면 카드를 하나 뽑아서 수행한다. 다만, 본인이 카드 하나를 hold하고 있다면 카드를 뽑지않고 hold하는 카드를 수행한다. 각 턴에서 수행되는 카드의 번호를 출력한다. 📌 Solution 참가 가능한 사람의 수가 최대 500,000명이고 자원의 개수 또한 2,000,000,000개로 굉장히 크기 때문에 메모리 관리를 잘 해야 한다. 우리가 알아야 하는 것은 어떤 사람이 어떤 자원을 가지고 있냐가 아니다. 그렇기 때문에 특정 자원을 누군가가 가져갔는지에 대한 여부만 알면 된다. 그러면 보통 다음과 같이 자료구조를

2023년 7월 17일
·
1개의 댓글
·
post-thumbnail

[ 백준 ] 21922 학부 연구생 민상

📌 Problem N x M 크기의 연구실에는 몇가지의 물건들이 놓여져 있다. 물건은 각각 1, 2, 3, 4, 9로 나타나며 9는 에어컨을 말한다. 에어컨에서는 4방향(동서남북)으로 바람이 분다. 바람은 연구실 내부에서만 순환하고 연구실 벽에 닿으면 사라진다. 각각의 물건은 다음과 같이 바람의 방향을 변환시킨다. 연구실에서 에어컨 바람이 닿는 칸의 수를 구하면 된다. 📌 [Code](https://github.com/codesver/problem-solving-hub/tree/main/%EB%B0%B1%EC%A4%80/Gold/21922.%E2%80%85%ED%95%99%EB%B6%80%E2%80%85%EC%97%B0

2023년 7월 17일
·
1개의 댓글
·
post-thumbnail

[ 백준 ] 20165 인내의 도미노 장인 호석

📌 Problem 수비수를 구현하는 것을 크게 어렵지 않다. 실제 구현에 중요한 것을 공격수이다. 공격수의 구현 방법은 다음과 같다. 5개의 도미노가 다음과 같이 있다고 가정해보자. 각각의 숫자는 도미노의 높이이다. 여기서 높이가 3인 도미노를 동쪽으로 넘어뜨린다. 높이가 3이며 현재 인덱스가 0이기 때문에 0 + 3이 너머진 도미노의 경계값이다. 즉, index 2까지 영향을 미친다. (경계값은 넘어진 도미노가 영향을 미치는 도미노 직후의 인덱스이다.) 이후 index 1의 도미노도 같이 넘어진다. 이때 index 1의 도미노 경계값은 1 + 1 = 2 이다. 기존 경계값 3이 더 크기 때문에 넘어간다. index 2의 도

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 9519 졸려

📌 Problem 눈을 깜빡일 때마다 문자열이 변한다. 변하는 방법은 다음과 같다. X번 눈을 깜빡일 때 최종 문자열을 출력하면 된다. 📌 Solution 문자열의 변환 방법으로 역순으로 진행하면 된다. 문자열을 변환하다가 N번째 변환에서 첫번째 문자열과 같아지면 N을 주기로 문자열 변환이 반복된다는 것이다. 이를 통해 더 빠르게 문제를 해결할 수 있다. 📌 Code

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 15662 톱니바퀴 2

📌 Problem 8개의 톱니를 가지는 T개의 톱니바퀴가 일렬로 연결되어 있다. 각각의 톱니는 S극(1)과 N극(0) 중 하나를 가지고 있다. 하나의 톱니바퀴를 회전시키면 이웃하는 톱니바퀴들은 연결 상태에 따라 반대 방향으로 회전한다. 서로 다른 극으로 연결되어 있다면 같이 회전한다. 같은 극으로 연결되어 있다면 회전 하지 않는다. K번의 회전을 한 후에 모든 톱니바퀴 중에서 S극이 상단 톱니의 상태인 톱니바퀴들의 개수를 확인한다. 📌 Code

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 2174 로봇 시뮬레이션

📌 Problem 가로 A * 세로 B 크기의 필드에 N개의 로봇들이 있다. N개의 로봇들은 명령에 따라 움직인다. 명령은 다음과 같다. 잘못된 명령을 내리는 경우도 생긴다. 잘못된 명령을 내리면 추가 명령을 하지 않으며 오류 내용을 출력한다. 만약 모든 명령에 오류가 없다면 OK를 출력한다. 📌 Code

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 21610 마법사 상어와 비바라기

📌 Problem N x N의 필드가 있으며 필드는 1 x 1 크기의 칸들로 이루어져 있다. 각각의 칸에는 물을 저장할 수 있는 바구니들이 배치되어 있다. 마법사 상어는 비바라기 마법을 시험해보자 한다. 비바라기 마법은 N x N 필드의 좌측 하단에 비구름 4개를 생성한다. (N, 1) (N, 2) (N-1, 1) (N-1, 2)에 배치된다. 마법사 상어는 비바라기 마법을 통해 4개의 구름을 생성한 뒤 M번의 명령을 실행하고자 한다. 한 번의 명령은 다음과 같이 진행된다. 마법사 상어는 방향(1 ~ 8)과 거리(1 ~ 50)를 명령한다. 방향은 1부터 차례대로 W, NW, NE, E, SE, S, SW 방향이다. 구름들은 명령에 따라 해당 방향으로 주어진 거리만큼 이동한다. 필드는 마법을 통해 무한으로 연결되어 있다. 필드의 경계는 반대쪽 경계와 이어

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 18405 경쟁적 전염

📌 Problem N x N 크기의 시험관에 바이러스들을 배양한다. 바이러스는 1 ~ K의 정수로 이루어져 있다. 바이러스는 매초 상하좌우로 증식한다. 증식은 낮은 번호의 바이러스부터 진행된다. 이미 바이러스가 증식된 칸으로는 새로운 바이러스가 침투할 수 없다. S초가 지난 후에 X, Y에 증식된 바이러스 번호를 구한다. (없으면 0) 📌 Solution 매초마다 바이러스들을 증식시키고 S초 이후의 X, Y에 있는 바이러스 번호를 출력하면된다. 한 번 증식된 바이러스는 다른 바이러스가 침투할 수 없기 때문에 X, Y에 바이러스가 증식했다면 추가 증식을 종료해도 된다. 다만, 작은 번호의 바이러스부터 증식을 하는데 이를 순서대로 진행하기는 어렵다. 때문에 증식을 할 때 음수로 증식을 한 후 더 작은 번호가 같은 칸에 증식이 된다면 새로운 번호로 증식한다. 예를 들어 (2

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 12904 A와 B

📌 Problem 2개의 문자열이 주어졌을 때 첫 번째 문자열이 두 번째 문자열로 변환이 가능한지를 확인하면된다. 문자열 변환은 2가지 방법으로 이루어진다. 문자열 끝에 A를 추가한다. 문자열을 뒤집고 끝에 B를 추가한다. 📌 Solution 첫 번째 문자열을 두 번째 문자열로 만드는 것이 아니라 두 번째 문자열을 역으로 첫 번째 문자열로 변환가능한지 확인하면 된다. 만약 두 번째 문자열의 마지막 문자가 A이면 A를 제거한다. 만약 B라면 B를 제거하고 문자열을 뒤집는다. 이를 반복하다가 첫 번째 문자열과 길이가 같아지면 두 문자열을 비교하면 된다. 📌 Code

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 21608 상어 초등학교

📌 Problem N x N 크기의 교실이 있다. 1 x 1 칸마다 한 명의 학생이 앉을 수 있다. N x N명의 학생들이 순서대로 등교한다. 먼저 등교한순서대로 자신이 앉고 싶은 자리에 앉을 수 있다. 학생마다 선호하는 친구들이 4명씩 있다. 다음과 같은 방법으로 자리를 구한다. 주변(동서남북)에 선호하는 학생이 가장 많은 자리에 앉는다. 1번 조건이 동일한 경우에는 주변에 빈자리가 가장 많은 자리에 앉는다. 2번 조건이 동일한 경우에는 더 앞 자리(Row 0)에 앉는다. 3번 조건이 동일한 경우에는 창가(Col 0)에 가까운 자리에 앉는다. 📌 Solution 1번과 2번 조건은 각 빈자리를 탐색하면서 계산할 수 있다. 이 때 (0, 0) 자리부터 (N-1, N-1) 자리 순서로 탐색을 하면 3번과 4번 조건도 자연스럽게 충족할 수 있다. ArrangeDTO

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 20055 컨베이어 벨트 위의 로봇

📌 Problem 기존의 문제 설명이 들어 문제 자체를 다음과 같이 바꾸었다. (입력과 출력은 동일) 📌 Solution 문제는 블럭을 1번부터 2N번까지로 정의하였지만 풀이에서는 0번부터 2N - 1번까지로 하였다. Step 1. 컨베이어 벨트를 시계 방향으로 한 칸 회전한다. 컨베이어 벨트는 2N개의 블럭으로 구성되어 있다. Index는 블럭의 위치라고 하였을 때 시계 방향으로 회전시키면 마지막 index에 있는 블럭을 첫 번째 블럭으로 이동시키면 된다. 회전 이후에는 index N - 1에 있는 블럭에 로봇이 있는지 확인하고 회수 요청을 한다. **Step 2. 컨베이어 벨트에 올라와 있는 로봇들을 차례

2023년 7월 11일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 27942 :danceplant:

📌 Problem N x N (N은 짝수) 크기의 무대 정중앙에 2 x 2 크기의 식물이 있다. 식물은 다음과 같이 춤을 춘다. 식물의 상하좌우와 맞닿은 면적 중 가장 큰 에너지 합을 가진 변으로 늘어난다. 춤을 출 때는 맞닿은 변의 에너지를 흡수하며 늘어난다. 더는 늘어날 수 없거나 섭취 가능한 에너지가 0 이하이면 춤을 멈춘다. 총 에너지 섭취량과 춤추는 방향 기록을 출력하면 된다. 방향은 상하좌우가 UDLR으로 나타낸다. 추가로 섭취 가능한 에너지가 동일할 때는 상하좌우 순으로 우선순위를 둔다. 📌 Solution 매순간마다 상하좌우와 맞닿은 면의 에너지 총량을 구하고 가장 큰 에너지하을 가진 방향으로 이동한다. 만약 최대 에너지 총량이 0이거나 더는 이동할 수 없다면 종료한다. 📌 [Code](https://github.com/codesver/problem-solving-h

2023년 7월 10일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 14499 주사위 굴리기

📌 Problem N x M 크기의 지도가 있으며 정육면체의 주사위 하나가 특정 좌표 X x Y에서 시작한다. 주사위 눈은 모두 0으로 시작하며 동서남북으로 이동할 수 있다. 이동을 할 때마다 주사위가 위치한 곳의 지도 번호에 따라 다른 동작을 한다. 지도 번호가 0이면 주사위의 바닥에 있는 번호를 지도에 복사한다. 만약 0이 아니면 지도에 있는 숫자를 주사위 바닥에 복사하고 해당 위치의 지도는 0으로 초기화 한다. K번의 이동이 주어졌을 때 (동서남북 = 1243) 각 이동 별 주사위 윗면의 숫자를 출력하면 된다. 이 때 지도 밖으로 나가는 이동이 주어지면 해당 이동은 무시하고 출력도 하지 않는다. 📌 Solution 단순 구현 문제이기 때문에 각 이동(동서남북)별로 주사위의 눈들을 바꾼다. 또한 이동 후 지도와 맞닿은 부분의 지도 번호 상태에 따라 주사위 바닥면 눈과 지도 번호를 업데이트

2023년 7월 7일
·
0개의 댓글
·
post-thumbnail

[ 백준 ] 14719 빗물

📌 Problem 2차원 세계에서 각 column에 대한 블록 높이가 주어졌을 때 빗물이 고이는 영역의 수를 구하면 된다. 빗물이 고이기 위해서는 고인 영역이 좌우로 블록으로 쌓여있어야 한다. 📌 Solution 각각의 높이별로 몇개의 구역에 빗물이 고일 수 있는지 확인하면 된다. 하나의 높이에 다음과 같이 높이가 있다고 생각해보자. 위의 상황에서 빗물이 고일 수 있는 블럭은 3, 4번째 칸과 6, 7, 8번째 칸이다. 결과적으로 해당 높이에서 빗물이 고일 수 있는 칸은 5칸이다. 각각의 높이에 대해서 빗물이 고일 수 있는 칸을 구하면 된다. 📌 [Code](https://github.com/codesver

2023년 7월 5일
·
0개의 댓글
·