알고리즘 97

[C++/BOJ] 백준 2503 숫자야구(완전탐색)

https://www.acmicpc.net/problem/2503 2503번: 숫자 야구 첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트 www.acmicpc.net 음 .... 이문제를 보고 풀 방법이 생각조차 나지않아 답을 찾아보았다...ㅜㅜ 숫자는 1~9로 이루어졌고 서로 다른 숫자임을 알아야한다. 가장 작은 숫자는 123 가장 큰 숫자는 987이다. 123부터 987까지 for문을 돌려 s와 b의 개수가 동일한 것들만 배열의 값을 0으로 만들어 문제를 해결한다. #include using namespace std; int n, q, s, b; int c..

[C++/BOJ] 백준 18312 시각(완전탐색)

https://github.com/tony9402/baekjoon/tree/main/brute_force GitHub - tony9402/baekjoon: 코딩테스트 대비 문제집(Baekjoon Online Judge) 코딩테스트 대비 문제집(Baekjoon Online Judge). Contribute to tony9402/baekjoon development by creating an account on GitHub. github.com 저번 포스팅에 이어 코테를 대비해 완탐 문제들을 풀고있다. https://www.acmicpc.net/problem/18312 18312번: 시각 정수 N과 K가 입력되었을 때 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 K가 하나라도 포함되는..

[C++/BOJ] 백준 9663 N-Queen(백트래킹)_결국 풀었다

문제는 아주 간단하다 N이 주어질때 N*N 체스판에서 N개의 퀸을 놓는 방법의 수를 출력하면 된다. 일단 코드는 check 와 queen 함수를 사용하였다. #include using namespace std; int col[16],cross1[30], cross2[30];//15*2-1 = 29이므로 약 30 int cnt, n ; bool check(int r, int c) { // 놓을 수 있는 자리인가 if (col[c] || cross1[r+c] || cross2[r-c+n-1]) return false; return true; } void queen(int row) { //row 행에 퀸 놓을 자리 찾기 if (row == n) {// 방법 하나 발견! cnt++; return; } for (..

[C++/BOJ] 백준 4963 섬의 개수(BFS)

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 이 문제의 특별한 점 1 . 대각선으로 이어지는 것도 고려해야한다. 2 . 0을 두개 입력받으면 반복문이 종료되어야한다. 대각선으로 이어지는 것도 고려해야한다. 그림을 그려서 대각선까지 갈 수 있도록 dx, dy를 만든다. [배열의 크기는 8] ( i , j ) 를 중심으로 8개의 칸을 생각한다. 8개의 칸 중 하나의 칸을 선택해 돌려가면서 dx는 i의 값을 , dy 는 j의 값으로 배열을 ..

[C++]BFS_상하좌우 이동 배열(dx,dy)

BFS알고리즘 문제를 풀때 늘 사용하는 배열이 있다. int dx[] = {0,1,0,-1}; int dy[] = {1,0,-1,0}; 바로 이차원 배열의 탐색을 위해서 사용하는 dx와 dy배열이다. 이 배열을 이용해 상하좌우를 탐색하는데 지금까지 방향을 잘못알고있었다. 만약 이 배열이 동,남,서,북 이라는 것을 알고있다면 이 글을 읽을 필요 없다. 이런 당연한 배열을 포스팅할생각 없었지만 어제 https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicp..

[C++/BOJ] 백준 7576 토마토(BFS)

문제 : https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 간단 풀이 : 1) 토마토을 입력받으면서 - 익은 토마토(1)가 들어온다면 q에 넣고 dis를 0으로 설정한다. - 익어야하는 토마토(0)이 들어온다면 dis를 -1으로 설정한다. 2) 전형적인 bfs의 while문을 돌린다. - 범위를 벗어나거나 -1이 아니라면(익지않은 토마토에서 값이 변경된경우) continue한다. - 새로운 위치의 dis를 원래 위치의 dis+1 ..

[C++/BOJ] 백준 17298 오큰수(스택)

문제 : https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 풀이방법 : 2개의 벡터, 1개의 스택을 이용해 풀이하였습다. 0) n을 입력받고 v2라는 답을 저장할 벡터를 생성한다. 1) vector에 n개의 숫자를 입력받는다. 2) stack에 index를 넣는다. 3) stack에 있는 index값에 해당하는 vector값과 i값을 비교한다. 4)( i값은 stack에 있는 값보다 항상 오른쪽 값이므로) 큰 값을 v2벡터에 넣는다. 5) v2벡터를 출력한..

[C++/BOJ] 백준 4949 균형잡힌 세상(스택)

https://www.acmicpc.net/problem/4949 4949번: 균형잡힌 세상 하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마 www.acmicpc.net 풀이 방법 : 띄어쓰기(공백문자)와 함께 문자들을 입력받는다. 그 후 한 글자(char)씩 ()[]를 구별하여 짝이 맞는지 확인하고 맞으면 yes, 아니면 no을 출력한다. 정답코드 : #include #include // getline을 위해 #include using namespace std; bool isok; int main() { while (1) { isok = true;..

[C++/BOJ] 백준 1753 최단경로(다익스트라)

https://www.acmicpc.net/problem/1753 1753번: 최단경로 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1≤V≤20,000, 1≤E≤300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1≤K≤V)가 주어진다. www.acmicpc.net 정답 코드: 더보기 #include #include #include using namespace std; int v, e, start; using PI = pair; #define INF 2e9; int visit[20001]; int dist[20001]; vector V; priority_queue q; int main() { cin >> v >> e >> start..

[C++/Python/BOJ] 백준 11053 가장 긴 증가하는 부분 수열 (DP)& 반례

https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 이 문제는 LIS(최장 증가 부분 수열)으로 이와 비슷한 백준문제(같이 풀면 좋을 문제)에는 가장 긴 감소하는 부분 수열 [11722번] 가장 긴 바이토닉 바이토닉 부분 수열 [11054번] 상자넣기[1965번] 전깃줄[2565번] 2565번: 전깃줄 첫째 줄에는 두 전봇대 사이의 전깃줄의 개수가 주어진다. 전깃줄의 개..