일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- rust설치
- 13458
- 14890
- 1259
- 15650
- 백준
- 연산자 끼워넣기 성공
- 15683
- 15652
- 3190
- rustup
- 분해합
- 백트래킹
- 14501
- C
- C++
- 테트로미노
- 10872
- 13460
- 15649
- 9663
- 문제풀이
- 러스트란 #cargo
- 14888
- 15651
- 14891
- 팰린드롬수
- 14503
- 2798
- 14500
목록C++ (5)
Easy-So-Easy
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cT1MAL/btskBLvBUuJ/deEWYenxtskgVxHni2Omo1/img.png)
백준 9663문제(Problem) 풀이(Solution) 이 문제를 풀기 전에 퀸이 움직일 수 있는 방향을 알아야 한다. 필자는 체스를 안한지 오래되어 찾아보았다. 퀸이 움직일 수 있는 방향은 아래 그림과 같다.(대각선 네 방향 + 상하좌우) 하지만 우리는 퀸보다 위에 있는 방향만 체크할 것이다. 왜냐면 백트래킹을 사용할 것이기 때문이다. 필자가 사용한 함수는 다음과 같다. - setting 함수: 퀸을 놓는 함수 - check 함수: 현재 위치에 퀸을 놓을 수 있는지 확인하는 함수 (매개변수 depth: y값이라고 생각해도 무방하다) 먼저, 퀸을 (0,0)자리에 놓을 수 있는지 check 함수를 통해 확인한다. 가능하다면 놓고, setting(depth+1)로 재귀 호출을 해준다. 여기에서 depth+..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/vaykg/btskEo7v9Bu/carUJZHJdkBu4ydKuRTh81/img.png)
백준 15652 문제(Problem) 풀이(Solution) 이 문제는 조합과 재귀함수를 이용하여 풀 수 있는 문제이다. 문제의 포인트는 같은 수를 여러번 골라도 되고, 수열은 사전 순으로 증가하는 순서로 출력해야한다는 점이다. 이는 재귀적으로 함수를 호출 할 때 인자값으로 pos를 보냄으로써 해결할 수 있다. 재귀적으로 호출할 함수는 func 함수이다. depth가 M이 되었을 때 즉, 조합이 M개 이루어졌을 때 해당 조합의 원소를 출력한다. func 함수의 인자값을 통해 받은 pos부터 반복문을 시작하여, 출력할 a배열을 업데이트 해주어 서로 다른 조합을 생성하였다. 이 문제는 재귀 함수를 통해 조합을 만들 줄 알기만 하면 어렵지 않은 문제이다. 코드(Code) #include using namesp..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/badGuO/btskAYa2RBA/XLCua5nbHwmX8VuhKiSNE0/img.png)
백준 15651 문제(Problem) 풀이(Solution) 이 문제는 재귀함수와 조합을 이용하여 푸는 문제이다. 문제의 핵심 포인트는 같은 수를 여러번 골라도 되어 visited 배열을 통해 따로 사용 여부를 체크하지 않아도 된다는 점과 중복되는 수열을 여러 번 출력하면 안된다는 점이다. func 함수를 통해서 재귀함수와 조합을 이용하였다. depth가 M이 되면, 즉 func 함수가 M번 재귀 호출되면 arr 배열에 담아 있는 원소들을 출력하도록 코드를 구현하였다. 또한 func 안의 for문을 통해서 arr 배열에 원소를 계속 업데이트 해주었다. 이 문제는 15649번과 15650번 문제를 풀었다면 아주 쉽게 풀었을 문제이다. 코드(Code) #include using namespace std; i..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cpwcrn/btskEo0zcUN/StVvW5up5eypO8eCQarKJK/img.png)
백준 15650 문제(Problem) 풀이(Solution) 이 문제는 15649번 N과 M (1) 문제와 매우 유사한 문제이다. 문제의 핵심 포인트는 1~N까지의 자연수를 고르는데 중복이 불가능하고, 중복 수열 또한 있어서는 안된다. 1~N까지의 자연수 선택 중복을 피하기 위해서 visited 배열을 사용하였고, 중복 수열을 피하기 위해선 func 함수에 pos 변수 인자를 받아주었다. func 함수의 기저조건은 depth가 M일 때 즉, 조합이 M개가 선택되었을 때 arr 배열에 저장되어 있는 값들을 출력하도록 설정하였다. 또한, pos값을 받은 pos+1부터 반복문을 돌게 하여 수열의 중복을 피하도록 코드를 짜보았다. 코드(Code) #include #define MAX 9; using namesp..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/beCosW/btskuYORHJ6/Tdxvu1ksDk0oCLbprucNyK/img.png)
문제(Problem) 풀이(Solution) 이 문제는 조합의 개수를 이용하는 문제이며 재귀함수와 간단한 로직으로 풀이가 가능합니다. 문제의 핵심 포인트를 말씀드리자면, 1~N까지의 자연수를 고르는데 중복이 불가능하다는 점입니다. 각 숫자들을 딱 한 번씩만 사용할 수 있도록 visited 배열로 사용 여부를 체크하여 중복을 피해줍니다.(visited가 fasle이면 -> 사용 / visited 가 true이면 -> 사용 불가) func 함수와 print 함수를 사용하였으며 각각 조합을 뽑는 함수(func 함수), depth가 m이 되었을 때 출력하는 함수(print 함수)로 구성됩니다. func의 재귀 호출이 M번 이루어지면(즉, visited의 true의 개수가 m이 되면) print 함수를 통해 계속..