본문 바로가기

백준

(100)
[C++/PGS] Lv.5 : 방의 개수 (그래프) https://school.programmers.co.kr/learn/courses/30/lessons/49190?language=cpp 문제 설명 원점(0,0)에서 시작해서 아래처럼 숫자가 적힌 방향으로 이동하며 선을 긋습니다. ex) 1일때는 오른쪽 위로 이동 그림을 그릴 때, 사방이 막히면 방하나로 샙니다. 이동하는 방향이 담긴 배열 arrows가 매개변수로 주어질 때, 방의 갯수를 return 하도록 solution 함수를 작성하세요. 제한사항 배열 arrows의 크기는 1 이상 100,000 이하 입니다. arrows의 원소는 0 이상 7 이하 입니다. 방은 다른 방으로 둘러 싸여질 수 있습니다. 구현 자체는 어렵지 않다. 다만 한번 방문했던 노드를 다른 경로에서 다시 방문하게 되면 방이 만들어..
[알고리즘] 문자열 다루기 - 로마숫자(cpp) 로마인들은 로마 숫자를 사용했다. 1은 I, 5는 V, 10은 X로 표현했고, I, V, X가 나타내는 문자열은 각 글자가 나타내는 수의 합이다. 예를 들어 XVI = 10 + 5 + 1 = 16이다. 단, IV는 4이고 IX는 9이다. 예를 들어 IVI = 4 + 1 = 5이다. 위의 예외에 추가로, IIV는 3이고 IIX는 8이라고 하자. 반드시 IIV, IIX는 3, 8이어야 한다. 즉 IIV는 1 + 1 + 5 = 7도 아니고, 1 + 4 = 5도 아니고, 반드시 3이어야 하는 것이다. 최대 길이가 10인 로마 숫자를 나타내는 문자열이 주어질 때 이 문자열이 나타내는 수를 출력하는 프로그램을 작성하시오. 입력 표준 입력으로 입력을 받는다. 최대 길이가 10인 문자열이 주어지고, 이 문자열은 I, ..
[알고리즘] DP - 계단 오르기(cpp) N단의 계단이 있고, 한번에 계단을 한 단 또는 두 단을 올라갈 수 있다고 하자. 최대 두 군데의 계단에는 장애물이 있어서 올라갈 수 없다. 이 때 N단까지 올라가는 서로 다른 방법의 수를 구하는 프로그램을 작성하시오. 입력 표준입력으로 세 정수 N A B가 주어진다. N은 계단의 단수로, 1 이상 30 이하이다. A와 B는 장애물이 있는 계단의 위치이다. A와 B는 0 이상 N 이하인 수이며, A와 B가 같을 수 있다. A, B 값이 0이라면, 이는 장애물이 없다는 뜻이다. 예를 들어 N, A, B가 3, 0, 1이라고 주어지면 총 3단의 계단이 있고, 장애물은 1단에만 있다. 조금 더 생각해보면 N, A, B가 3, 1, 0으로 주어져도 같다는 것을 알 수 있다. 출력 표준출력으로 하나의 정수를 출력..
[코드트리] 나무박멸 - 시뮬레이션 (기출문제) 삼성 SW 역량테스트 2022 상반기 기출 나무박멸 n * n 격자에 나무의 그루 수와 벽의 정보가 주어집니다. 나무의 성장과 번식력이 좋아서 제초제를 뿌려 나무의 성장을 억제하고자 합니다. 제초제의 경우 k의 범위만큼 대각선으로 퍼지며, 벽이 있는 경우 가로막혀서 전파되지 않습니다. 다음과 같이 초기 조건이 주어진다고 가정할 때, 1년동안 나무의 성장과 억제는 다음과 같이 이뤄집니다. 인접한 네 개의 칸 중 나무가 있는 칸의 수만큼 나무가 성장합니다. 성장은 모든 나무에게 동시에 일어납니다. (중략) 각 3개의 과정이 1년에 걸쳐 진행된다고 했을 때, m년 동안 총 박멸한 나무의 그루 수를 구하는 프로그램을 작성해보세요. 입력 형식 첫 번째 줄에 격자의 크기 n, 박멸이 진행되는 년 수 m, 제초제의 ..
[C++/BOJ] 21610 : 마법사 상어와 비바라기 (시뮬레이션) https://www.acmicpc.net/problem/21610 문제 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기를 크기가 N×N인 격자에서 연습하려고 한다. 격자의 각 칸에는 바구니가 하나 있고, 바구니는 칸 전체를 차지한다. 바구니에 저장할 수 있는 물의 양에는 제한이 없다. (r, c)는 격자의 r행 c열에 있는 바구니를 의미하고, A[r][c]는 (r, c)에 있는 바구니에 저장되어 있는 물의 양을 의미한다. 격자의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 마법사 상어는 연습을 위해 1번 행과 N번 행을 연결했고, 1..
[C++/BOJ] 21608 : 상어 초등학교 (시뮬레이션) https://www.acmicpc.net/problem/21608 문제 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호가 매겨져 있고, (r, c)는 r행 c열을 의미한다. 교실의 가장 왼쪽 윗 칸은 (1, 1)이고, 가장 오른쪽 아랫 칸은 (N, N)이다. 선생님은 학생의 순서를 정했고, 각 학생이 좋아하는 학생 4명도 모두 조사했다. 이제 다음과 같은 규칙을 이용해 정해진 순서대로 학생의 자리를 정하려고 한다. 한 칸에는 학생 한 명의 자리만 있을 수 있고, |r1 - r2| + |c1 - c2| = 1을 만족하는 두 칸이 (r1, c1)과 (r2, ..
[C++/BOJ] 21318 : 피아노 체조 (누적합) https://www.acmicpc.net/problem/21318 문제 피아노를 사랑하는 시은이는 매일 아침 피아노 체조를 한다. 시은이는 N개의 악보를 가지고 있으며, 1번부터 N번까지의 번호로 부른다. 각 악보는 1 이상 109 이하의 정수로 표현되는 난이도를 가지고 있다. 난이도를 나타내는 수가 클수록 어려운 악보이다. 1 ≤ x ≤ y ≤ N 을 만족하는 두 정수 x, y를 골라 x번부터 y번까지의 악보를 번호 순서대로 연주하는 것이 피아노 체조이다. 시은이는 피아노 체조를 할 때, 지금 연주하는 악보가 바로 다음에 연주할 악보보다 어렵다면 실수를 한다. 다시 말하자면, i(x ≤ i > n; for (int i = 1; i > nlist[i]; if(i==1) over[i] = 0; else ..
[C++/BOJ] 17179 : 케이크 자르기 (이진탐색) https://www.acmicpc.net/problem/17179 문제 생일을 맞이한 주성이가 생일 파티를 준비하려고 한다. 주성이는 일반 케이크 대신 평소 좋아하던 롤 케이크를 준비했다. 롤 케이크에는 장식이 존재해서 특정 위치에서만 자를 수 있다. 주성이는 롤 케이크 조각을 파티에 올 친구의 수 만큼 준비하고 싶어서, 가장 작은 조각의 크기를 미리 알아보기로 했다. 하지만 짓궂은 주성이의 친구들은 생일파티에 몇 명이 참석하는지 직접적으로 알려주지를 않는다. 그래서 몇 개의 수를 목록에 적어, 각 수만큼 조각을 만들었을 때 가장 작은 조각의 길이의 최댓값을 구하려고 한다. 예를 들어 70cm의 롤 케이크에 자를 수 있는 지점이 5군데(10cm, 20cm, 35cm, 55cm, 60cm)가 있다고 하자..

728x90