백준(66)
-
[백준/C++] 1926번 그림
문제: www.acmicpc.net/problem/1926 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로 www.acmicpc.net 문제풀이 BFS 알고리즘으로 문제를 풀었다. 코드 #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin>>n>>m; int visited[500][500] = {0,}; int board[500][500]; int dx[4] = {-1, 1, 0, 0}; int d..
2021.03.24 -
[백준/C++] 4889번 안정적인 문자열
문제: www.acmicpc.net/problem/4889 4889번: 안정적인 문자열 입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우 www.acmicpc.net 문제풀이 스택을 이용한 괄호 쌍 맞추기 문제이다. 괄호 쌍이 맞지 않게 입력이 되었다면 '{'을 '}'으로 또는 '}'를 '{'으로 바꿔 짝을 맞추는 최소 연산 횟수를 구한다. } -> { : '}'이 입력되었을 때 스택이 비어있다면 실행 { -> } : 입력 종료 후 스택에 남아있는 '{'에 대하여 실행(괄호 짝수개가 입력되므로 스택 사이즈의 2분의 1) 코드 #include #include usi..
2021.03.24 -
[백준/C++] 10799번 쇠막대기
문제: www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 문제풀이 왼쪽부터 레이저를 만나면 현재까지의 쇠막대기 수(스택의 사이즈 -1 )를 결과값에 더해주고 쇠막대기의 끝에 도달하면 결과값에 1을 더해주었다. ( ( -> s.push(1) ( ) -> result += s.size() - 1 ) ) -> result++ 코드 #include #include using namespace std; int main(){ ios::sync_with_stdio(false); ci..
2021.03.23 -
[백준/C++] 2504번 괄호의 값
문제: www.acmicpc.net/problem/2504 2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 www.acmicpc.net 문제풀이 스택과 배열을 이용하여 문제를 풀었다. 스택의 크기로 괄호가 몇 겹이 있는지 알 수 있고 스택의 크기를 인덱스로 하여 같은 수의 겹에 쌓여있는 수를 모두 더하고 한 겹을 벗어날 때마다 괄호 (, ]에 따라 2나 3을 곱해주었다. ( ) -> arr[s.size()] += 2 [ ] -> arr[s.size()] += 3 ) ) -> arr[s.size()] += arr[s.size()+1]*2..
2021.03.23 -
[백준/C++] 5430번 AC
문제: www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 문제풀이 입력되는 함수 R에 대하여 실제로 벡터 순서를 뒤집게 된다면 시간초과가 나온다. 때문에 덱을 이용하여 R이 현재까지 짝수번 입력되었다면 앞에서 함수 D(pop_front)를 실행하고 홀수번 입력되었다면 뒤에서 함수 D(pop_back)를 실행한다. 코드 #include #include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int T; //테스트 케..
2021.03.22 -
[백준/C++] 1021번 회전하는 큐
문제: www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 문제풀이 덱을 순차 탐색하여 뽑아야 하는 숫자의 인덱스를 찾은 후 front에서의 거리와 back에서의 거리를 비교하여 더 적은 쪽으로 덱을 회전시킨다. 코드 #include #include using namespace std; void funcL(deque& d, int num){ while(d.front() != num){ d.push_back(d.front()); d.pop_front(); } ..
2021.03.21