그리디 알고리즘 Greedy 파이썬 회의실 배정 BOJ1931 코딩테스트(8)
·
IT, Computer
목차 서론지난번엔 그리디 알고리즘 개념과 문제를 풀어보았다. 그리고 예고했던 대로 백준 BOJ1931문제를 풀었다. 처음에는 끝나는 시간 기준으로 어떻게 지지고 볶으면 될 줄 알았으나, 안 됐다. 그냥 천천히 내 풀이로 풀어보면 맞아떨어지지 않았다. 그래서 정답을 보니 아차 싶었다. 과거의 나는 왜 그런 생각을 했을까... 내 풀이 1 - 오답내가 풀었던 풀이 과정은 다음과 같다. 오답이니 무시해도 된다. 눈물나지만 공개처형 하는 것에 의의를 뒀다. 여기서 문제였던 점은, 꼭 끝나는 시간이 같거나 다른거에 영향을 안받기 때문이다라고 하면 되려나.모든 것을 고려했어야 됐는데 끝나는시간에 한정해서 경우를 나눈것이 화근이었다고 판단한다.1. 끝나는 시간 기준으로 정렬한다.2. 끝나는 시간 같으면 -> 앞에 숫..
그리디 알고리즘 Greedy 파이썬 코딩테스트 (7)
·
IT, Computer
서론지난번 재귀 포스팅에 이어 이번에는 그리디 알고리즘에 대해 알아보고자 한다. 이번 포스팅은 이 강의를 참고했다. 가능하다면 이번 포스팅에서 문제도 다룰 예정이고 만약 안된다면 다음 포스팅에서 마저 문제를 다뤄보겠다. 적을 내용이 얼마 없다면 바로 문제 풀것임.그리디 알고리즘이란?  현재 최적인 답을 근시안적으로 택하는 알고리즘 = 관찰을 통해 탐색 범위를 줄이는 알고리즘이다. 일반적으로는 관찰을 통해 탐색 범위를 어떻게 줄일지(=시간 복잡도를 낮출 지) 생각하는데, 이 때 탐색범위를 줄여도 올바른 결과를 낳는다는 사실이 증명이 되어야 한다. 증명이 안된다면 베팅하는거라 단순 노가다 코딩 보다 못한 결과를 초래할 수 있다. 하지만 코딩 테스트에서 빠르게 고안하고, 올바르게 증명할 확률은 극히 드물다. ..
재귀 파이썬 문제 삼각달팽이 프로그래머스 코딩테스트 (6)
·
IT, Computer
목차서론지난번 포스팅에 이어 이번에는 난이도가 있는 재귀 문제를 풀어보고자 한다. 삼각달팽이라는 문제로 프로그래머스에 있다. 문제 제목과는 다르게 예시부터 난이도가 있어보이는 생김새다. 아무튼 이번 포스팅에서는 해당 문제를 풀어보고 그 과정에 대해서 얘기하고자 한다. 설령 못풀어도 다른 사람 풀이 참고하는 한이 있어도 어떻게서든지 풀어볼 예정이다. 재귀 문제 다른 사람 풀이 분석풀이 방법을 엄청 생각해봤으나 도저히 재귀로 풀리지가 않아 다른 사람 풀이를 검색해봤다. 아니나 다를까 재귀로 푼사람은 거의 없었고, 재귀로 풀었다는 사람 보면 되게.. 복잡했다. 재귀 강의에서 for문과 재귀는 서로 왔다갔다할 수 있지만, 코드 복잡도와 돌아가면서 생기는 불필요한 메모리의 등가교환이라고 말했는데(내가 의역함ㅋㅋ...
재귀 파이썬 문제 종이자르기 프로그래머스 코딩테스트 (5)
·
IT, Computer
서론지난번엔 BFS에 대해서 알아보았다. DFS도 알아보아야 하지만.. 다음주에 문제 풀고 DFS할 예정임. 아무튼 오늘은 재귀에 대해서 알아본 뒤, 직접 문제를 몇개 더 풀어보고자 한다. 사실 재귀보단, DP가 더 자주 출제된다. 하지만 DP를 하기 위해서는 재귀를 충분히 알아야 된다고 한다. 그래서 재귀를 몇문제 더 풀어보고 다음주에 DP로 넘어갈것임.간단한 재귀 이론영상에서 본 재귀 이론을 간단하게 언급하고자 한다. 재귀와 반복문은 서로 왔다갔다할 수 있다고 한다. 다만 재귀는 보긴 좋지만 소모하는 시간이 많으므로 애지간하면 반복문에서 해결하라고 한다. 자신을 여러번 호출하는데 이게 굉장히 비효율적이기 때문이다. 이후 DP에서 해소할 수 있는 무언가를 하는데 이건 재귀에 익숙해진 뒤 들어가는게 맞다..
BFS Python 문제 BOJ2178 코딩테스트 (4)
·
IT, Computer
서론지난 포스팅에서는 BFS를 이용한 개념과 문제를 풀어보았다. 이번 포스팅에서도 백준 BFS 문제인 BOJ2178을 풀어보겠다. 이전과 같이 처음에는 내가 어떻게 풀었는지 적을 것이고, 이후에는 답지를 참고해서 내 것과 비교할 예정이다. BOJ 2178 내가 푼 풀이과정 및 코드 문제를 보니 최단거리를 찾는 것이다. BFS를 택했다.(사실 BFS 영상에 나온거라 뇌빼고 BFS로 바로 들어가도 되지만 이렇게 접근하는 연습을 하는게 맞다고 판단함.) 최단 경로를 어떻게 접근할까 했다. BFS를 돌며 내가 지나는 칸이 1이면 -> 이전칸 +1을 하고 0이면 안지나 가는 가장 기본적인 툴을 생각했다. 그런데 1도 0도 아닌 값을 만났을 때를 고려해야됐다. 때문에 1이 아닌 칸을 만나면 -> 해당 값과 +1한 ..
BFS Python 문제 BOJ1926 코딩테스트 (3)
·
IT, Computer
서론지난번엔 BFS 개념에 대해 포스팅을 했다. 이번에는 BFS를 이용해 문제를 풀어보고자 한다. 원래 이 포스팅에서 여러가지 풀이를 남길 생각이었으나, BFS는 하나도 벅차다. 때문에, 이 포스팅에서는 백준 BOJ1926만 풀어보도록 하겠다.백준 BOJ 1926 문제 풀이 (내풀이)내가 1926 문제를  푼 과정은 다음과 같다. 1) 너비를 알아야 됨 -> 주변부 탐색 BFS 사용. 2) 총 drawing의 개수 -> 시작점이 하나가 아니기에 모든 그래프를 훑는 for문을 만들고 + 새로운 시작점이 나올때마다 체크하는 변수 필요 3) 새로운 시작점이 생기면 그 때 while queue: 문을 도는것이니 for문 안에 while문 넣기. 4) 마지막에 max값과 현재 너비 비교 후 갱신. 해서 풀은 코드..
BFS Python 개념 코딩테스트 (2)
·
IT, Computer
서론코딩테스트 계획 포스팅에서 BFS 강의에 해당하는 내용이다. 지난번엔 배열에 대해 다루고, 풀어보았다면 오늘은 BFS에 대해 풀어보고자 한다. 내가 참고한 강의는 C++로 되어 있기 때문에 개념을 이해하는데만 참고하고 실제로 쓰이는 코드는 파이썬 코드로 작성하였다. 기본적인 개념을 숙지하고, BFS 코드가 돌아가는 과정을 알아보도록 한다. 다음 포스팅에서는 문제로 넘어갈것임. BFS 개념BFS는 Breadth First Search의 약자로, 너비를 우선으로 탐색(방문)하는 알고리즘이다. 흔히 DFS와 비교가 되는데 DFS는 깊이(Depth)우선 탐색임. BFS는 이해를 돕기 위해 다양하게 묘사가 된다. 내가 본 유튜브 강의에서는 그림판에서 flood fill을 묘사로 했다. 하지만 내가 가장 와닿았..