일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 14501
- 15649
- 14888
- 14890
- 연산자 끼워넣기 성공
- 3190
- 15683
- 분해합
- 러스트란 #cargo
- 15652
- 팰린드롬수
- 9663
- C++
- 14891
- 13460
- rust설치
- 14500
- 10872
- 14503
- 1259
- 테트로미노
- 백트래킹
- 13458
- 15650
- 15651
- 문제풀이
- rustup
- 2798
- 백준
- C
목록BaekJoon (21)
Easy-So-Easy

백준 12100 문제(Problem) 백준(BOJ)의 문제 중 하나인 3190번 문제를 해결해보려고 합니다. 이 문제는 뱀이 기어다니며 사과를 먹으면 뱀의 길이가 늘어나고, 뱀이 벽이나 자기 자신의 몸과 부딪히면 게임이 종료되는 문제입니다. 전체 코드(Code) #include #include #include using namespace std; int N, K, L, X, x, y, map[101][101], sec, current_dir=4; char C; pair tail_pos = {0, 0}, head_pos = {0, 0}; queue dir; void print() { cout > x; map[y-1][x-1]=5; // 사과의 위치: 5 } cin >> L; for(int i=0; i> X..

백준 12100 문제(Problem) 풀이(Solution) 이 문제는 제목 그대로 easy 문제이다. 왜냐면 "5번까지 이동했을 때"라고 이동 횟수를 한정지어줬기 때문이다. 이 문제의 주의할 점은 다음과 같다. ** 한 번의 이동에서 이미 합쳐진 블록은 또 다른 블록과 다시 합쳐질 수 없다.** 이것을 계속 기억하면서 문제를 풀어나가자. 필자는 구현을 이용하여 문제를 풀었다. '상(1), 하(2), 좌(4), 우(3)'로 이동하는 케이스를 각각 코드 구현하였다. 코드는 아래에 확인하여 보기 바란다. 전체 코드(Code) #include #include using namespace std; int n, max_e, last; void check(int a[][21]) { for (int i = 0; i ..

백준 1259 문제(Problem) 풀이(Solution) 이 문제는 재귀 함수의 사용 방법만 알면 간단하게 구현이 가능하다. 연산자를 넣어줄 배열 op를 선언하여 덧셈, 뺄셈, 곱셈, 나눗셈의 개수를 각각 넣어주었다. 그리고 사용 개수가 남아 있으면 연산을 실행하며 모든 연산을 하였을 때 최솟값, 최댓값을 계속해서 갱신해주면 되는 문제이다. 전체 코드(Code) #include #include #include using namespace std; int N, A[101], op[4], res_min=INT_MAX, res_max=INT_MIN; int check(int pos, int i, int v) { if(pos==0) return v+arr[i]; // + 덧셈 if(pos==1) return ..

백준 1259 문제(Problem) 풀이(Solution) 필자는 팰린드롬수와 같은 문제를 풀 때 문자열로 받아서 해결한다. 숫자로 받는 것보다 훨씬 편하니 문자열로 받는 걸 추천한다. 사용한 변수를 먼저 말하자면 다음과 같다. - s : 입력받은 문자열 - len : 입력받은 문자열의 길이 문제를 해결한 방법은 아래와 같다. 1. 문자열로 해당 입력을 받는다. 2. i가 0부터 len / 2까지 for문을 반복하여 s[i]와 s[len-i-1]가 다를 경우 팰린드롬수가 아니기 때문에 "no"를 출력한다. 3. 팰린드롬수이면 "yes"를 출력한다. 아래 코드를 보면 필자는 goto구문을 사용하여 더욱 용이하게 로직을 구현하였는데, "no"가 출력될 때는 "yes"가 출력되면 안 되니 goto 구문으로 f..

백준 10872 문제(Problem) 풀이(Solution) 팩토리얼 문제는 재귀함수의 대표적인 문제이다. 문제를 요약하자면 N! 를 구하는 건데, 혹시 이게 뭔지 모를 분들을 위해 설명하겠다. N! 는 N 팩토리얼로, 1 x 2 x 3 x 4 x ... x (N-1) x N 을 구하는 문제이다. 여기에서 사용한 함수는 fact함수로 재귀호출을 할 함수이다. 기저 조건은 n이 0일 때나 n이 1일 때 1을 반환하도록 하였고, n*fact(n-1) 로 계속 재귀적으로 호출하도록 함수를 만들었다. n*fact(n-1)은 다음과 같이 바뀐다. n * (n-1) * (n-2) * (n-3) * (n-4) * .... * 1 메인 함수에서 호출한 fact(n)이 위의 식이 되기에 바로 출력하면 된다. 전체 코드(..

백준 2231 문제(Problem) 풀이(Solution) 이 문제는 닥치는 대로 해보자는 용기를 가지고 있는 사람이라면 매우 쉽게 풀 수 있는 문제이다. 왜냐면 브루트포스 문제이기 때문이다. 이 문제를 요약하자면 M의 분해합이 N인경우, M을 N의 생성자라고 부르는데, N이 주어졌을 때 가장 작은 생성자를 구하고, 생성자가 없는 경우는 0을 출력하는 문제이다. M > n; for(int i=1; i

백준 2798 문제(Problem) 풀이(Solution) 이 문제는 브루트포스로 쉽게 풀 수 있는 문제이다. 문제에서 집고 가야 할 핵심 포인트는 'N장의 카드 중에서 3장의 카드를 뽑는다는 점'과 '고른 카드의 합은 M을 넘지 않으면서 최대한 가깝게'라는 점이다. 몇 장을 뽑아야 하는지는 이미 문제에서 나왔으니, 그리고 3장 밖에 뽑지 않으니 필자는 단순하게 3중 for문을 사용하였다. (3장 이상을 뽑아야 하거나 몇 장 뽑아야 하는지 나오지 않으면 재귀함수를 이용하는 것을 추천한다.) 각 케이스 마다 최대값과 비교하여 M을 넘지 않으면서 M에 최대한 가까운 값을 max 변수를 갱신함으로써 문제를 해결하였다. 번외: max 변수는 long long 타입으로 작성하지 않아도 된다. 하지만 필자는 최대값..

백준 2580 문제(Problem) 풀이(Solution) 이 문제는 빈칸의 위치를 배열이나 벡터에 따라 저장해놔야겠다! 고 생각이 들었다면 So-easy 하게 풀 수 있는 문제이다. 필자는 빈칸의 위치를 v라는 벡터에 따로 담아두었고, 이를 이용한 백트래킹을 사용하였다. 여기에서 사용한 함수는 func 함수와 check 함수이다. 각각 어떤 용도로 사용하였는지는 아래에 설명하겠다. void func(int n) { if(n==v.size()) { done=1; return; } int x=v[n].first, y=v[n].second; for(int i=1; i