본문 바로가기
반응형

전체 글62

백준 2206번 - 벽 부수고 이동하기 (C++) 문제 해결 방법 일반적이지 않은 최단거리 문제라 BFS를 이용하여 구현하였으며, visit를 3차원 배열로 선언하여서 [좌표][좌표][벽을 뚫고 여기까지 도착했는가?]를 표시하였다. [][][1] 이면 해당 좌표까지 도착하는 길에 벽을 뚫고 온 것이고 [][][0]이라면 해당 좌표까지 오는 길에 벽을 뚫고 오지 않은 것. 또한, queue에 좌표뿐 아니라 해당 경로에서 벽을 뚫고 왔는지에 대한 변수 또한 필요하여 총 3개의 변수를 이용하여 queue를 구성하였다. 아쉬웠던 점 없음 코드 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 32 33 34 35 36 37 38 39 40 41 42 43 44 .. 2021. 7. 30.
백준 2580번 - 스도쿠 (C++) 문제 해결 방법 3차원배열[3x3으로 나눴을때의 구역][구역 내 세로][구역 내 가로]을 이용하여서 스도쿠 판을 나타내었고, DFS/백트래킹을 통하여 해결하였다. 이 문제에서 사용된 백트래킹은, 구역+가로+세로의 숫자의 종류가 9가지라면(그 칸에 넣을 숫자가 없다면), 재귀를 되돌아가며 기존에 변경한 값을 모두 0으로 되돌려준다. 아쉬웠던 점 3차원배열로 잘 짠거같은데 벡터때문인지 근본적인 무언가 때문인지 약 300ms로, 시간이 예상보다 느리게 나오더라..(빠를줄 알았는데..) 사실 pop만 있고 push는 없는 구조라서 배열을 사용하고 매개변수로 index를 넘겨주면서 충분히 할 수 있었는데 아쉽다. 애지간하면 배열보다 벡터를 사용하는 습관을 들였는데 문제풀이 할 때에는 별로 좋은 습관은 아닌 것 같.. 2021. 7. 30.
백트래킹(Backtracking) 알고리즘 설명 DFS를 기반으로 생성된 알고리즘으로, 기존 DFS는 모든 경우의 수를 찾아가기 때문에 불필요한 탐색이 존재하여 이 부분이 문제가 되는 경우가 있었다. 때문에 이를 보완하기 위해서 나온 알고리즘으로, 현재 탐색을 진행하고있는 루트가 이미 실패가 예정된 루트라면 해당 루트를 종료하고 더 이상 그 루트를 통하여 탐색을 진행하지 않고 이전으로 돌아가는 것을 백트래킹이라고 칭한다. 때문에 현재 루트의 가능성을 판단하는 조건이 잘 짜여질수록 효율이 올라가게 된다. 보통 DFS를 사용하는 문제에서, 완전탐색 시 경우의 수가 너무 많아지는 문제에 대하여 조건을 걸어서 루트를 줄이는 역할을 한다. 대표적인 백트래킹 문제인 N-Queen에서의 예시 문제를 요약하자면 퀸이 서로 겹치지 않게 NxN크기의 판에 N개의 .. 2021. 7. 30.
백준 9944번 - NxM보드 완주하기 (C++) 문제 해결 방법 입력 시, *의 갯수를 카운팅하고, 내부에서 DFS를 통하여 구현하였다. 내부 작동 중 .을 *로 바꾸는 횟수를 카운팅하여 최종*의 갯수가 NxM의 갯수가 되면 리턴하였다. 또한, 백트래킹을 이용하여 롤백을 구현하였으며, 외 특별한점은 없다. 아쉬웠던 점 없음 코드 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 #include .. 2021. 7. 30.
정보처리기능사 요점정리/5일 합격 후기 (NCS 개정) 정보처리기능사 공부량 필기 : 4일 (이기적 필기 + 부록 기출문제) 실기 : 5일 (이기절 실기 + 20년~21년 기출 모두) 나는 평소에 코딩을 하기 때문에 1/4는 공부가 정말 필요 없이 넘길 수 있기 때문에 이런 시간의 벼락치기가 가능했는데, 코딩 지식이 없다고 하더라도 코딩 난이도가 높지 않기 때문에 +2일정도 더 공부를 하면 충분히 가능할 것 같다. 교제 추천 처음에는 사실 거기서 거기겠지~ 라는 생각으로 아무거나 구매했고, 그렇게 이기적 문제집을 구매하였는데 직접 풀어본 결과 시나공의 문제가 더 좋은 것 같다. 특히 01~05년도에 마지막으로 출제된 내용들을 억지로 적중률을 높이려고 넣어둔 의도가 자주 보였다. 공부하는데 누가봐도 안나오는 내용이 자꾸 옆에 잡다하게 있어서 정작 필요한 내용이.. 2021. 7. 26.
백준 1052번 - 물병 (C++) 문제 해결 방법 입력값을 2진수로 변환하여 string에 저장한다.(10입력 -> 1010저장 = 2^3L물병 1개, 2^1L 물병 한개라는 뜻) 이후 가장 L가 적은 물병들을 합쳐주고, 이를 string 내부의 1 갯수(물병갯수)가 내가 들 수 있는 물병의 갯수보다 같거나 작아질때까지 반복한다. 이 과정에서 L가 작은 물병들을 합치기 위해 사용한 추가 물병의 갯수 만큼 답을 출력한다. 아쉬웠던 점 예시로 1000을 탐색할 때, 역순으로 탐색하며 0을 만나면 0 갯수를 누적시켜주고 1을 만나면 누적시킨 0의 갯수만큼 특정 변수에 누적시키는 형태를 띄고 있는데, 구조상 진행하면서 해당 탐색 인덱스 뒤에 0밖에 올 수 없기 때문에 그냥 자릿수를 통해서 내 뒤에 있는 0의 갯수를 구할 수 있었다. 지금 생각났.. 2021. 7. 16.
반응형