![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/0DL31/btqGXnN3sFj/CEu9rD84yqbcjh1abzInDk/img.png)
[BOJ 14891(S1) 리뷰] 톱니바퀴 문제. 입력으로 톱니바퀴의 번호와 방향이 주어진다. 톱니바퀴가 돌때 양 옆에있는 톱니바퀴와 맞닿아 있는 부분이 서로 다른 극이라면 옆에 있는 톱니바퀴도 회전하게 된다. 만약 옆에있는 톱니바퀴가 회전하며 또 다른 톱니바퀴와 다른 극 이라면 그 톱니바퀴도 회전해야 한다. 주의해야할 점은 톱니바퀴를 회전시키기 전에 미리 양 옆에 있는 톱니바퀴와 확인을 해준 후 회전시켜야 한다. 회전하는 톱니바퀴 각각에 대해 양 옆의 톱니바퀴를 확인해줘야하므로 재귀함수를 사용했고 이미 회전한 톱니바퀴는 다시 회전하지 않도록 하기 위해 isUsed배열을 사용했다. 처음엔 구현이 막막했는데 그냥 각각의 톱니바퀴에 대해 일일히 index로 접근해 확인하는 방법을 택했다. #include #..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/9mzxt/btqGK429ts5/iS0LgkMRY3tdKnqgyOjuDk/img.png)
[BOJ 11559(G5) 리뷰] 뿌요뿌요 문제다. 같은색의 뿌요가 4개인접해있으면 그 뿌요들은 터지며 없어진다. (애니팡과 비슷) 뿌요가 터지면 위에있는 뿌요들은 아래로 모두 내려오게 되며 아래로 내려왔을때 4개이상 인접해있는 뿌요가 있다면 또 터지게 된다. 이 때 연속적으로 몇번의 차례동안 뿌요가 터지는지 계산하는 문제이다. 애니팡을 해봤으면 하나를 터트렸을때 터진자리에 새로운 캐릭터가 채워지면서 연쇄적으로 터지는걸 경험한적이 있을것이다. 그걸 생각하며 구현하면 된다. 같은색의 뿌요를 찾는 BFS와 뿌요가 터진 후 뿌요들을 아래로 내려주는 함수를 구현하면 된다. #include #include #include #include #include #include #include #include #inclu..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bxkTYk/btqGK4PeXV2/glMZKuk0lQBNAezDtUkSV0/img.png)
입력 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마지막 줄에는 이동하는 명령이 순서대로 주어진다. 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4로 주어진다. 출력 이동할 때마다 주사위의 윗 면에 쓰여 있는 수를 출력한다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/beJFh3/btqGU1i7sPZ/S4qWArBwpqOXtstmg6Khm0/img.png)
사무실의 크기와 상태, 그리고 CCTV의 정보가 주어졌을 때, CCTV의 방향을 적절히 정해서, 사각 지대의 최소 크기를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 사무실의 세로 크기 N과 가로 크기 M이 주어진다. (1 ≤ N, M ≤ 8) 둘째 줄부터 N개의 줄에는 사무실 각 칸의 정보가 주어진다. 0은 빈 칸, 6은 벽, 1~5는 CCTV를 나타내고, 문제에서 설명한 CCTV의 종류이다. CCTV의 최대 개수는 8개를 넘지 않는다. 출력 첫째 줄에 사각 지대의 최소 크기를 출력한다. [BOJ 15683 (G5) 리뷰] 문제가 드럽게 길다..; 그런데 문제가 길다는것은 그만큼 설명을 자세하게 해준다는것. 정확히 뭘 구현해야하는지 제시해주고 있다. 사각지대의 최소 크기를 구해야하므로 백트래킹을 이용..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/TvVh7/btqGpANSyhV/YikjuwHMMCFmIMIKzLADx0/img.png)
[BOJ 1987(G4) 리뷰] 후... 엄청나게 힘들었던 문제다. 처음엔 문제 잘못읽고 BFS로 접근했다. 코딩 다했는데 그제서야 문제 제대로 이해하고 싹 갈아엎었다. 처음엔 set을 통해 문자를 하나하나씩 쌓으면서 중복된게 있는지 비교했는데, 처음에 백트래킹하면서 쌓아놓았던 문자를 제거하지 않아서 틀렸다. 이걸 수정하고 제출했더니 set때문인지 시간초과가 나왔다. 그래서 인터넷을 참고해 중복된걸 확인하는것을 A~Z까지 배열에 담아 O(1)로 확인했더니 통과되었다. 후.. 2시간은 넘게 걸린거같다. #include #include #include #include using namespace std; char board[21][21]; bool isUsed[21][21]; int dx[4] = { 1,-..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/0u3bd/btqGiUlhbKp/T1vGKF4QODeooT89pKkxc1/img.png)
[BOJ 1992(S1) 리뷰] 전에 풀었던 별찍기 문제와 비슷해서 금방 풀었다. SIZE와 X,Y좌표를 받아서 범위에대해 같은값인지 확인하고 같은값이 아니라면 크기를 줄여가며 재귀함수에 넣어주면 된다. 첨에 재귀함수를 실행하는 순서를 잘못넣어서 좀 틀렸지만 순서를 바로잡아주니 바로 정답처리 되었다. #include #include #include #include #include using namespace std; char table[100][100]; int n; int check(int size,int x, int y) { char ret = table[x][y]; for (int i = x; i < x + size; i++) { for (int j = y; j < y + size; j++) { i..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/xjXYo/btqGexkOplt/oL13GPG2lKNNudEwFHK5y0/img.png)
[BOJ 1780(S2) 리뷰] SIZE와 x,y좌표를 이용해 풀었다. 같은 값이 아닐경우 크기를 계속 줄어나가며 재귀함수를 호출했다. #include #include #include #include #include using namespace std; int table[2300][2300]; int n; int a=0, b=0, c=0; int check(int size,int x, int y) { int Cur = table[x][y]; for (int i = x; i < x+size; i++) { for (int j = y; j < y+size; j++) { if (table[i][j] != Cur) //같은모양이 아님 return -100; } } return Cur; //같은모양임 } void ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/cdXTui/btqGkRBVurq/oMqJTeR6l1hkrthuwcm3U1/img.png)
[BOJ 2447(S1) 리뷰] 반복되는 패턴이 크기가 계속 커지는 경우이므로 재귀를 이용해 해결했다. #include #include #include #include using namespace std; char table[2200][2200]; int n; void printStar(int x, int y) { for (int i = y; i < y + 3; i++) table[x][i] = '*'; table[x + 1][y] = '*'; table[x + 1][y+1] = ' '; table[x + 1][y + 2] = '*'; for (int i = y; i < y + 3; i++) table[x+2][i] = '*'; } void func(int n, int x, int y) { if (n <..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b93y6b/btqGklCU1ej/ULuZzO3kxFkrc4ecG6vRe0/img.png)
[BOJ 1629(S1) 리뷰] 쉬워보이지만 정답률이 낮은것엔 이유가 있다. 최대값이 21억이므로 21억을 곱하는 연산을 한다면 당연히 오버플로우가 생긴다. 이 문제는 재귀를 통해 해결해야한다. x^16은 x^8 * x^2과 같음을 이용해야 한다. #include #include using namespace std; long long int f(int A, int B, int C) { if (B == 1) return A % C; long long int val = f(A, B / 2, C); val = val * val%C; if (B % 2 == 0) return val; return val * A%C; } int main(void) { cin.tie(0); ios::sync_with_stdio(0)..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/ICzAI/btqGiJD7lJW/Bes3aeilOVS5iEDGYYdA80/img.png)
입력 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있는 곳으로는 이동할 수 없다. 시작점과 도착점은 항상 평지이다. W와 H는 1이상 200이하의 자연수이고, K는 0이상 30이하의 정수이다. 출력 첫째 줄에 원숭이의 동작수의 최솟값을 출력한다. 시작점에서 도착점까지 갈 수 없는 경우엔 -1을 출력한다. [BOJ 1600(G5) 리뷰] 푸느라 혈압올랐던 문제.. 일단 첨에 문제 잘못이해하고 삽질 1시간 메모리 초과나서 +1시간 100%에서 틀렸다고 나와서 +1시간.. 거의 3시간이 걸렸고 결국 경계조건에 대해 예외처리를 해주고나서야 정답처리가 되었다. ..
- Total
- Today
- Yesterday
- 자바스크립트
- 재귀
- nodeJS
- 세그먼트 트리
- 중앙대학교
- nest.js
- node.js
- java
- ReactNative
- 그리디
- typeORM
- 백트래킹
- Computer Architecture
- nestjs
- 시뮬레이션
- 예외처리
- 투포인터
- 자바
- 컴퓨터 구조
- dfs
- 알고리즘
- 컴퓨터 통신
- 구현
- BFS
- 벨만포드
- 그래프
- 백준
- 스레드
- 동적계획법
- boj
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |