본문 바로가기

전체 글

[백준(Baekjoon) 9663번](Python) N-Queen 레벨(깊이)을 하나씩 늘려나가면서 재귀적으로 가능한 배치에 대해서 탐색한다. 즉, 어떤 레벨에서 퀸의 위치를 x라고 하면, 해당 레벨 전까지 퀸의 위치가 x인 점이있는지 체크하고, 해당 레벨 전까지 퀸의 위치가 해당 레벨의 퀸의위치의 대각선 상에 위치 한 점이 있는지를 체크해서 이 두가지 모드 아닐 경우에만 해당 레벨에서 퀸의 위치는 x가 되므로 그 위치 x와 그앞전의 지점들의 좌표를 유지한 채로 반복문을 돈다. 즉 ans가 +되는 경우는 모든 말들이 서로서로 영향을 받지 못하는 위치에 있다는 말이 된다. 재귀를 이용한 dfs와 backtracking에 대하여 더 공부할 수 있는 좋은 문제였다. 더보기
[백준(Baekjoon) 1987번](Python) 알파벳 큐를 set으로 놓고 큐에는 x,y좌표와 지나온 칸의 문자열을 append하면서 bfs로 현재 좌표에서 갈수 있는 네 방향을 탐색한다. 좌표가 주어진 범위안에 있고, 좌표가 이미 지나온 칸들의 문자를 합친 문자열안에 포함되어있지 않으면 큐에 append해주며, max값을 문자열의길이와 이전 max값 중 큰 값으로 초기화시켜준다. 결국 max안에는 갈수있는 최대칸 수 가 담기게 된다. bfs에 대하여 공부할 수 있는 문제였다. 더보기
[백준(Baekjoon) 1261번](Python) 알고스팟 현재 좌표로부터 갈수있는방향의 좌표를 탐색하며 해당 좌표의 check를 확인하는데, 방문하지 않은 좌표(check의 값이 -1이 아닐 경우) 이며 동시에 해당 좌표의 값이 주어진 N,M범위에 있는지 체크하고 빈 방일 경우 appendleft를 통해서 큐의 앞쪽에 append해주면서, 빈방을 최대한 먼저 확인 해주고 더이상 빈방이 없을경우 벽을 한칸 뚫어주고, 또 그다음 빈방을 최대한 갈수있는 곳까지 확인 해주는 식으로 최소한의 벽을 깨고 목적지까지 도달한다. check리스트의 마지막 원소 값이 정답이 된다. 최적의 경로탐색을 가능하게해주는 다익스트라 알고리즘에 대하여 공부할 수 있었다(check리스트를 최선의 값으로 바꾸면서 진행) 더보기
algorithm study 시작!! 학교 친구들끼리 알고리즘 스터디를 시작한지 3주차가 되었다. 매주 구현해 볼 자료구조 몇가지를 정하고, 알고리즘 문제도 선별 한 후에, 한명씩 돌아가며 이해한 내용들,자신이 직접 구현한 코드를 설명 및 서로 피드백을 주고받는 식으로 진행중이다. 지금까지는 정렬관련 자료구조에 대해 직접 구현해보고 백준에서 한주에 2~3문제씩 풀고 있다. 어떤 알고리즘 인지 확인하고 코드를 짜는건 쉬웠지만 막상 개념을 보지 않고 바로 코드를 작성하려고 하니까 힘들었다. 앞으로 열심히해서 기초를 탄탄히 다져야 겠다. 공동으로 스터디를 위해 사용하는 깃주소>>breakalgorithm 더보기
[백준(Baekjoon) 1874번](Python) 스택 수열 숫자를 입력받을때, 원래 있던 오름차순의 1~N까지 숫자를 담은 배열에서 그 숫자 보다 작은 숫자는 push(+) 해주면서 cnt값을 증가시켜주고(리스트의 원소를 직접 옮겨도 되지만 시간초과가 난다.), 해당 숫자까지 cnt가 올라가면 stack의 마지막원소와 같은지를 확인하고 같으면 꺼내즈고 pop(-) 해주는 작업을 계속해서 반복해주면 정답이 나오게 된다. 처음에는 1~N까지 1씩 커지는 숫자를 담은 배열 이라는 조건을 무시하고 그냥 숫자 하나가 나올때 마다, 푸쉬,팝 연산을 직접 수행하였다. 그러니까 상당히 많은 시간이 소요되었다. 리스트 원소를 옮겨 주지 않고, 단순히 변수에 값을 하나씩 늘려가며 해당 숫자가 될 때까지 푸쉬 해주고 밑에 조건문을 둬서 해당 숫자가 스택에서 맨 마지막에 나오는 숫자.. 더보기
[백준(Baekjoon) 2805번](Python) 나무 자르기 이분법을 이용하여 첫,끝 점을 잡고 중간값을 기준으로 나무들을 잘랐을때 잘라진 나무 길이 값이 주어진 M보다 크면 시작점을 중간값 보다 하나 증가시켜주고 위와 같은 방식으로 반복, 작으면 중간값보다 하나 작은값으로 끝값을 두고반복하다 보면 원하는 값이 나오게 된다. 첫번째로 맨 위의 코드로 풀었는데 길이순으로 나무를 정렬 한 뒤, 나무들의 길이에 따라 잘라 사잇값에서 찾게끔 하였다(ex).(두번째나무길이 - 세번째 나무길이)+(첫번째 나무길이- 세번째 길이 나무)한 값이 M보다 크면 두번째 나무 길이와 세번쨰 나무길이 사이에서만 찾으면 되는 알고리즘을 구상하였다. 하지만 나무의 길이은 어떻게 치중되어 있을지 모르는 상황이기 때문에 내가 구상한 알고리즘보다 이분법을 사용하는게 훨씬 좋은 방법인 것 같다. 더보기
[백준(Baekjoon) 1018번](Python) 체스판 다시칠하기 문제에서 패턴은 두가지라고 했으므로 미리 패턴 두가지를 선언해주고, 입력받은 배열에서 8x8만큼씩 끊어 검사하면서 해당 8x8배열이 패턴으로 바뀌기 위해서는 각각 몇번의 횟수만큼 바꿔야 되는지를 세어서 리턴하는 함수를 통해 최솟값들을 리스트에 담고, 그 리스트 중에서 최솟값을 리턴해주면 정답이 나온다. 처음엔 함수를 따로 만들지 않고 그냥 한방에 처리하려고 했는데 너무 헷갈려서 함수를 만들어 떼어놓고 생각하니까 훨씬 잘 풀렸다. 천천히 차근차근 코딩하는 습관을 길러야겠다. 더보기
Node js로 웹앱 만들기!! 내맘대로 추가하는 Web Dictionary my github link :) 사용 언어 Node js 핵심 기능 웹 페이지에서 원하는 title과 이 title에 관한 description을 저자와 함께 추가, 수정,삭제 할 수 있다. 구현 Node js의 express모듈을 사용하여 전반적인 구현을 하였고 templete engine으로는 jade를 사용하였다. mysql과 node를 node-mysql모듈을 사용하여 연동하였다. 느낀점 node js의 전반적인 흐름과 역할과 각종 모듈들의 사용법에 대하여 배울 수 있었다. mysql을 사용하고 연동하면서 코딩해보면서 데이터베이스 초석을 다질 수 있었다. git, homebrew, npm 등 앞으로 개발하면서 필요한 tool들에 대해 배울 수 있었다. .. 더보기