본문 바로가기

전체 글137

백준 g1 18809 Gaaaaaaaaaarden c++ https://www.acmicpc.net/problem/18809 18809번: Gaaaaaaaaaarden 첫째 줄에 정원의 행의 개수와 열의 개수를 나타내는 N(2 ≤ N ≤ 50)과 M(2 ≤ M ≤ 50), 그리고 초록색 배양액의 개수 G(1 ≤ G ≤ 5)와 빨간색 배양액의 개수 R(1 ≤ R ≤ 5)이 한 칸의 빈칸을 사이에 두 www.acmicpc.net 풀이 1. 큐 2개 동시에 돌리기 Red 배양액과 Green 배양액이 있는데, 둘이 서로에게 영향을 주므로 하나를 다 bfs 돌려놓고 다른 하나 마저 돌리기 이런 게 안 된다. 동시에 돌려야 한다. BFS는 거리가 1인 칸 모두 방문 -> 2인 칸 모두 방문 -> 3인 칸 모두 방문 ... 이렇게 거리순으로 방문을 하고, 거리가 1인 칸을.. 2024. 1. 17.
백준 g3 1941 소문난 칠공주 c++ https://www.acmicpc.net/problem/1941 1941번: 소문난 칠공주 총 25명의 여학생들로 이루어진 여학생반은 5×5의 정사각형 격자 형태로 자리가 배치되었고, 얼마 지나지 않아 이다솜과 임도연이라는 두 학생이 두각을 나타내며 다른 학생들을 휘어잡기 시작 www.acmicpc.net 풀이 DFS는 ㅜ자 형태의 경로가 안 된다. 전체 25자리 중 7자리를 고르는 25C7을 해도 충분히 시간 제한 안에 풀 수 있다. next_permutation을 통해 25C7를 구하고, Y의 개수가 4개를 넘거나 인접하지 않으면 continue 하도록 했다 서로 인접해있는지는 BFS로 풀었고, prin 한 명을 시작점으로 해서 area가 7이 되지 않으면 인접하지 않다는 뜻이므로 false를 re.. 2024. 1. 16.
백준 g5 16987 계란으로 계란치기 c++ https://www.acmicpc.net/problem/16987 16987번: 계란으로 계란치기 원래 프로그래머의 기본 소양은 팔굽혀펴기를 단 한 개도 할 수 없는 것이라고 하지만 인범이는 3대 500을 넘기는 몇 안되는 프로그래머 중 한 명이다. 인범이는 BOJ에서 틀린 제출을 할 때마다 턱 www.acmicpc.net 문제 설명 input 계란의 내구도, 계란의 무게 output 깰 수 있는 계란 개수의 최대 규칙 1. 맨 왼쪽의 계란을 든다. 2. 깰 수 있는 계란 중 하나를 골라 계란을 부딪힌다. 이때 들고 있는 계란이 깨져있거나, 깰 수 있는 계란이 남아있지 않을 땐 그냥 넘어간다. 3. 한 칸 오른쪽 계란을 들고, 2번을 반복한다. 4. 맨 오른쪽 계란까지 수행했으면 끝낸다. 풀이 N 0).. 2024. 1. 16.
백준 g5 1759 암호 만들기 c++ https://www.acmicpc.net/problem/1759 1759번: 암호 만들기 첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다. www.acmicpc.net 풀이 moCnt와 jaCnt로 각각 모음과 자음 개수를 세 준 뒤에, 조건에 맞으면 출력하고 그렇지 않으면 그냥 return하면 된다 소스 코드 /*boj g5 1759 암호 만들기*/ #include #include #define MAXN 20 using namespace std; int L, C; char ans[MAXN]; char arr[MAXN]; int moCnt = 0; int jaCnt .. 2024. 1. 16.
백준 15665 N과 M (11) c++ https://www.acmicpc.net/problem/15665 15665번: N과 M (11) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 /*boj s2 15665 N과 M (11)*/ #include #include #define MAXN 105 using namespace std; int N, M; int arr[MAXN]; int ans[MAXN]; void func(int k) { if (k == M) { for (int m = 0; m M; for (int i = 0; i < N;.. 2024. 1. 15.
백준 s2 15663 N과 M (9), s2 15664 N과 M(10) c++ https://www.acmicpc.net/problem/15663 풀이 다른 N과 M 문제들과 다르게, 중복되는 수가 수열로 주어질 수 있다. ex) 9 7 1 9 이런 경우에는 1 7 9 9와 9는 같은 수열이므로 한 번만 출력되어야 하고, 1 7 ... 9 9 대신 9와 9가 같이 선택되면 99 수열을 이룰 수 있다. 이를 해결하기 위해서는 같은 자리에 같은 숫자가 들어가는 경우를 방지하면 된다. 예를 들어 1 _ 에서 빈 자리에 9가 한 번 들어가고, 그 다음에 9가 또 들어가는 건 똑같은 수열이므로 안 된다. 그러나 _ _ 에서 첫 번째 자리에 9가 들어가고, 두번째 자리에 9가 들어가는 것은 괜찮다. 서로 다른 자리에 똑같은 수가 들어가는 것은 괜찮다. 이 예외처리를 위해 for문으로 숫자를 .. 2024. 1. 15.
백준 s3 15654 N과 M (5) c++ https://www.acmicpc.net/problem/15654 15654번: N과 M (5) N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다. N개의 자연수 중에서 M개를 고른 수열 www.acmicpc.net /*boj s3 15654 N과 M (5)*/ #include #include #define MAXN 10 using namespace std; int N, M; int arr[MAXN]; int answer[MAXN]; bool isused[MAXN]; void func(int k) { // [k]에 넣을 차례, if (k == M) { for (int i = 0; i < M; i++).. 2024. 1. 15.
백준 s3 15652 N과 M (4) c++ https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 풀이 비내림차순이므로 (중복 가능), 다음 원소를 고를 때 마지막으로 택한 원소 이상을 고르도록 하면 된다. 코드 /*boj s3 15652 N과 M (4)*/ #include #define MAXN 9 using namespace std; int N, M; int answer[MAXN]; void func(int k, int j) { // j부터 가능 if (k == M) { for (int .. 2024. 1. 15.
백준 s3 15651 N과 M (3) c++ https://www.acmicpc.net/problem/15651 15651번: N과 M (3) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 코드 /*boj s3 15651 N과 M (3)*/ #include #define MAXN 9 using namespace std; int N, M; int answer[MAXN]; void func(int k) { if (k == M) { for (int i = 0; i < M; i++) { cout M; func(0); } 2024. 1. 15.