분류 전체보기
-
[C++] BOJ 14891번: 톱니바퀴프로그래밍/알고리즘 PS 2020. 11. 13. 10:34
문제 링크 문제 풀이 문제에 나온 조건에 따라 시뮬레이션 하면 풀 수 있는 간단한 문제이다. 1번부터 4번 톱니바퀴의 움직이기 전의 N극과 S극을 비교하여 어떤 톱니바퀴가 움직일지를 판단하고, 해당 톱니바퀴들을 움직이는 시뮬레이션 하는 방식으로 문제를 풀어주었다. 문제를 풀 때에 시계 방향과 반시계 방향을 코드로 작성하는 과정에서 반대로 생각하여 애를 먹었었다. 시계 방향과 반시계 방향을 헷갈리지 않게 조심해야겠다. 코드 #include using namespace std; #define N '0' #define S '1' #define CLOCKWISE 1 #define COUNTER_CLOCKWISE -1 string wheel[5]; int oldStartIdx[5] =..
-
[C++] BOJ 14499번: 주사위 굴리기프로그래밍/알고리즘 PS 2020. 11. 4. 11:46
문제 링크 문제 풀이 문제에 주어진 조건을 그대로 시뮬레이션하는 방식으로 문제를 풀었다. 문제를 풀 때에 "지도의 좌표는 (r, c)로 나타내며, r는 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로부터 떨어진 칸의 개수이다."라고 적힌 부분을 주의 깊게 읽어야 한다. 필자는 이 부분을 무시하여 처음에 코드를 작성할 때에 x가 들어갈 좌표에 y, y가 들어갈 좌표에 x가 들어가도록 구현하는 문제가 발생하였다. 또 "주사위는 지도의 바깥으로 이동시킬 수 없다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다."라는 조건도 주의해서 구현해야 한다. 코드 #include using namespace std; #define RIGHT 1 #define LEFT 2 #de..
-
[C++] BOJ 15686번: 치킨 배달프로그래밍/알고리즘 PS 2020. 10. 29. 19:04
문제 링크 문제 풀이 문제에 주어진 조건을 그대로 시뮬레이션하는 방식으로 문제를 풀었다. 이 문제는 특이하게도 값을 입력받을 때에 모든 좌표의 각 해당 위치의 값을 기록할 필요 없이, 집(1)과 치킨집(2)의 위치만 저장하여도 문제를 풀어낼 수 있다. 아래의 코드는 다음의 순서대로 구현되었다. 1. 입력받은 값을 통해 집과 치킨집의 위치를 기록 2. 도시의 모든 치킨집들 중 M개의 치킨집을 선택 2번의 예: M이 3이고 치킨집이 A,B,C,D가 있을 경우 [A,B,C를 선택 / A,C,D를 선택 / B,C,D를 선택]하는 3가지 경우가 생겨남 3. 선택한 치킨집에 대한 각 집의 치킨 거리를 계산 4. 구한 치킨 거리들을 이용해 도시의 치킨 거리를 계산 5. 기존의 도시의 치킨 거리 값보다 새로운 도시의 ..
-
[C++] BOJ 12100번: 2048 (Easy)프로그래밍/알고리즘 PS 2020. 10. 28. 23:58
문제 링크 문제 풀이 예전에 유행했던 스마트폰 게임 2048에서 따온 문제이다. 문제로 만들면서 실제 게임과 달라진 조건이 존재하는데, 이동을 한 번 하여도 블록이 추가되지 않는다는 것이다. 처음에는 위, 아래, 오른쪽, 왼쪽으로 맵(Map)에 있는 블록을 이동시키고 합치는 함수를 각각 구현하려 했으나 더 좋은 방법이 떠올라 다른 방법을 이용하였다. 한 방향으로 블록(Block)을 이동시키는 함수를 구현하고, 맵(Map)을 90도 회전시키는 함수를 구현하여 두 함수를 적절히 함께 사용해 4방향으로 이동하는 경우의 수를 따지는 방법이었다. 아래의 코드는 작성한 풀이 방법대로 구현한 코드이다. 코드 #include using namespace std; int N; int result = 2; int orig..
-
[C++] BOJ 18808번: 스티커 붙이기프로그래밍/알고리즘 PS 2020. 10. 24. 22:28
문제 링크 문제 풀이 문제에 주어진 조건을 시뮬레이션하기 위해 스티커가 주어졌을 때, n번째 스티커의 회전 상태의 따른 세로 길이를 저장하는 배열 R과 C를 만들어 주었다. '한 번도 회전하지 않은 상태의 n번째 스티커의 가로와 세로 길이'를 이용하여 R과 C를 계산하는 함수를 만들고, '한 번도 회전하지 않은 상태의 n번째 스티커의 가로와 세로 길이'가 주어지면 앞에서 만든 함수를 실행해 주었다. 코드는 아래에 적은 과정을 반복하여 상황을 시뮬레이션 한다. 1. 노트북에 현재 회전 상태의 n번째 스티커를 붙일 수 있는 위치가 있는지 확인 2. n번째 스티커를 붙일 수 있는 위치가 있으면 해당 스티커에 대한 반복을 종료. 위치가 없으면 n번째 스티커를 90도 회전 시킴 3. 위의 1, 2 과정을 반복하고..
-
[C++] BOJ 15683번: 감시프로그래밍/알고리즘 PS 2020. 10. 20. 10:11
문제 링크 문제 설명 총 5종류의 CCTV가 문제에서 주어지고, CCTV의 배치도가 주어졌을 때 CCTV 사각지대의 최소 개수를 구하는 문제이다. M, N이 8 이하로 작기 때문에 백트래킹을 이용하여 문제를 풀어보았다. DFS 문제를 풀 때와 비슷하게 dx, dy 상수를 만들어 이동 방향을 설정해주었다. 문제를 읽을 때 "CCTV는 CCTV를 통과할 수 있다." 라는 부분을 읽지 못하여 여러 번 틀리면서 제출하였다. 문제를 주의 깊게 읽을 필요성을 느꼈다. 코드가 많이 길어졌는데 더 간결하게 작성할 방법을 찾아볼 필요가 있어보인다. 코드 #include #include #include #include // 문제에서 제시한 0~6의 숫자 #define EMPTY 0 #define WALL 6 #define..