알고리즘/구현(24)
-
[프로그래머스/Java] 행렬 테두리 회전하기 Lv.2
문제 행렬 테두리 회전하기 풀이 단순 구현을 해도 풀리는 문제였다. 주어지는 행, 열 크기에 맞춰 board를 만들어주고 queries의 (x1, y1, x2, y2) 좌표에 맞게 시계방향으로 값을 swap해준다. 이때 각 query별 값의 최솟값을 찾는다. 코드 import java.util.*; class Solution { int[][] board; public int[] solution(int rows, int columns, int[][] queries) { setBoard(rows, columns); int index = 0; int[] answer = new int[queries.length]; for (int[] query : queries) { int x1 = query[0] - 1; i..
2023.12.02 -
[백준/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++] 18258번 큐 2
문제: www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 문제풀이 큐의 메소드들을 구현하는 문제이다. 명령의 수 N의 범위가 1 ~ 2,000,000 이므로 큐의 크기를 2,000,000으로 선언했다. 코드 #include using namespace std; void push(int); int pop(); int front(); int back(); int size(); int empty(); int fir = 0, rear = 0;..
2021.03.21