본문 바로가기

백준136

백준 15685 c++ "드래곤 커브" -PlusUltraCode- https://www.acmicpc.net/problem/15685 [필자 사고]이 문제는 dy,dx 의 Idx변화량을 이용하는 문제이다.핵심 사고 방식은 (nextIdx+1)%4 회전하는 방식을 왼쪽과 같은 코드로 생각이 날 수 있냐가 관건이다. 처음에 무슨 문제인가 쳐다봤을 때 하나하나 차근차근 문제를 읽고 규칙성을 찾은 결과세대가 변화할 때 최근에 이동한 변화량을 위와 같은 코드로 작성하게 되면 문제를 풀 수 있게 된다. 구현 문제이니 만큼 함수명을 써서 역할을 분담하자!! 아래는 코드 해설이다.코드 설명전역 변수 및 구조체dy, dx: 각각 오른쪽, 위쪽, 왼쪽, 아래쪽 방향을 나타내는 배열입니다.ddy, ddx: 또 다른 방향 배열로, 같은 순서로 오른쪽, 위쪽, 왼쪽, 아래쪽을 나타냅니다.st.. 2024. 11. 7.
백준 15683 c++ "감시" -PlusUltraCode- https://www.acmicpc.net/problem/15683 [필자 사고]이 문제는 구현 문제이다.dx dy 를 이용하여 1번부터5번까지 경우의 수를 나눠서 진행방향으로 나아가야 된다. 필자는 처음에 복사하는 copyArr 을 전역변수로 선언하여 문제가 생겼다.다음부터는 copyArr을 선언하는 변수는 지역 변수로 선언해야 될거 같다. 왜 전역변수로 선언하면 문제가 되냐면 예를들어 2번에서 순수한 arr을 복사시켜 놨는데4번 idx로 dfs를 진행하면 copyArr을 4번에서의 순수한 arr을 또 복사시키게 된다.이렇게 되면 2번 idx로 돌아왔을 때 기존 순수한 2번 arr이 복사가 되는게 아닌다른 값이 복사가 되어져 있기 때문이다. 중요한 부분이다. 아래는 소스코드 상세 해설이다  전역 변수 .. 2024. 11. 4.
백준 14891 c+ "톱니바퀴" -PlusUltraCode- #include #include using namespace std;string gear[4];int isRotate[4];void init() { for (int i = 0; i = 3) return; if (gear[idx][2] != gear[idx + 1][6]) { isRotate[idx + 1] = clock * -1; right_check(idx + 1, clock * -1); }}void check(int idx, int clock) { isRotate[idx] = clock; left_check(idx, clock); right_check(idx, clock); for (int i = 0; i > gear[i]; } int k; int g; int r; cin >> k; for (in.. 2024. 11. 3.
백준 3190 c++ "뱀" -PlusUltraCode- https://www.acmicpc.net/problem/3190 [필자 사고]이 문제는 큰 틀에서 보면 BFS 탐색 문제이다. 다만 이 문제만의 특별한 점은 아래와 같다.1. 이동하는 뱀2. 사과를 먹은 후 뱀의 상태3. 뱀의 이동방향4. 벽에 부디치거나 몸통에 부디치면 종료 총 4개로 나눌 수 있다. 필자는 첫 번째 이동하는 뱀과 사과를 먹은 후 뱀의 상태에서 많은 어려움이 있었다.고민의 고민한 결과 큐를 이용하여 뱀의 이동과정을 기록하였다. 다른 분들의 코드를 참고해보면 덱을 이용하신 분들도 있었다. 같은 원리이기 때문에 설명은 생략한다.아래는 소스코드 해설이다. 함수 설명configGoTo()현재 시간에 따라 방향을 변경합니다. path 맵에서 nowTime에 해당하는 방향 변환이 있을 경우, 이.. 2024. 10. 12.