본문 바로가기

전체 글

(131)
dfs로 조합 구하기 보호되어 있는 글입니다.
우선순위 큐, 힙 우선순위 큐란? 우선 순위를 가진 항목들을 push하고, 우선 순위에 따라 pop하는 자료구조이다. 큐라고 하니 내가 아는 일직선의 큐 형태를 떠올리지만, 그것과는 전혀 다른 트리 형태의 힙 자료구조로 구현된다. (그래서 우선순위 큐와 힙을 동의어로도 많이 쓴다고 한다.) 힙이란? 힙은 완전 이진트리의 형태로 우선 순위에 따라 push, pop되는 자료구조이다. 크게 최대 힙, 최소 힙 두 가지 종류가 있다. 최대 힙이란? 말 그대로 힙 데이터 요소의 우선 순위가 큰 값으로 이루어져 있는 완전 이진트리이다. 최대 힙의 삽입 방식 1. 완전 이진트리를 유지하며 순차적으로 삽입된다. 2. 삽입 이후에 루트 노드까지 순차적으로 값을 비교하며, 값이 부모보다 크다면 현재 노드와 교체한다. 최대 힙의 삭제 방식 ..
[BOJ] 뒤집기_1439 내가 짠 코드. 다른 사람이 짠 코드 효율성에서도 내 코드가 더 길고, 속도도 느리고, 메모리도 더 많이 차지한다. 내가 푼 방식 1. 연속된 0과 1의 구간을 구하여 배열에 추가한다. 2. 둘 중 더 짧은 배열의 길이를 출력한다. 다른 사람 코드 리뷰 요즘 카카오, 쏘마 코테 등을 보면서 코딩 테스트에는 어느정도 수학적 사고를 요구한다고 느꼈다. count + 1 // 2 도 엄청난 수학적 사고가 필요한 것은 아니지만, 그래도 왜 이렇게 되는지 꼼꼼히 잡고 넘어가자. 문자가 바뀌는 시점을 모두 count한 후, 그 값에 +1 후 // 2 연산을 수행하였다. 이게 어째서 가능한 걸까?? (음,, 진짜 왜 이렇게 되는거지?? 그냥 귀납적으로 받아들이면 되는건가,,,?) 리뷰 일단 저렇게 풀거면 굳이 배열에..
[이코테] 모험가 길드 내가 푼 코드 참고하여 고친 코드 기존의 내 코드는 뭐가 문제였을까?? 요즘 내가 푸는 문제들이 다른 블로그들과 좀 다르게 푼다고 느끼고 있다. 그것을 곰곰히 생각해 본 결과, 내가 짠 코드는 대충 짜서 효율성이 떨어지는 코드였다. 앞으로 한 문제를 풀더라도 더 효율성 있는 코드가 있을지, 다른 블로그를 참고하여 더 깊게 생각해보자. 우선 1번과 2번의 이미지를 비교했을 때, 다른 점은 while문과 for문의 차이이다. 1번은 while문을 사용하여 cnt를 별도로 세주었고, for문은 그런거 없이 배열의 값을 바로 가져와서 사용했다. 보통 while문을 사용할 때는 count를 세주는 변수를 따로 만들어 사용하기 보단, while q:와 같은 상황에서 주로 사용되는 것 같다.
2020 KAKAO BLIND RECRUITMENT_자물쇠와 열쇠 나의 잘못된 처음 풀이 생각. 벽을 돌면서 빈칸이 나오면, 그 빈칸에서 거리가 어떻게 되는지 계산한다. 즉, 한 빈칸을 기준으로, 다른 빈칸들이 거리에 어떻게 있는지를 계산한다. 풀이 코드 1. 기준점 하나를 for문으로 꺼낸다. 돌면서 거리를 append한다. for for으로 돌면서 해당 좌표를 기준점과 계산하여 거리를 계산한다. 이렇게 하나의 기준점을 기준으로 계산을 했다. 2. 키를 전부 돌면서 자물쇠에 맞는지를 전부 계산한다. 다른 사람 풀이 보고 이해가 안 가는 부분. 왜 저렇게 만들어 준 거지,,,? 그냥 해주면 안되나?? 굳이 background배열을 3배씩이나 해서 만들어 준 이유가 뭘까?? 해당 문제를 푸는 과정은 다음과 같다. 1. expendList라는 자물쇠 크기에 열쇠-1 * 2..
프로그래머스_소수 찾기 이 문제는 구현 방식을 떠올리는 것 보다는 피지컬이 필요한 문제였다. 이 문제를 통해 파이썬의 모르는 문법이 많다는 것을 알게 되었다. (파이썬 문법 잡긴해야하는데,,, 어떻게 해야 할까,,?) 나는 저 list(map(''.join, permutations(data, i)))가 왜 저렇게 나오는지,,, 모르겠다. 모르는 문법들 다 정리하자. map, list, join, permutation 등등,, 파이썬 문법 정리 map map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수이다. 위의 코드를 다시 보자면, permutations(data, i)을 통해 여러 데이터 리스..
프로그래머스_카펫 처음에는 어떻게 풀어야 할지 감을 못 잡다가, 문제가 완전 탐색 카테고리에 있는 걸 보고 완전 탐색으로 풀려고 접근했다. 근데 코드가 너무 지저분하고 변수명도 좀 웃긴 것 같다. 풀이 방법 노란색 타일을 세울 수 있는 경우에서, 그에 맞게 갈색 타일을 세우고 그것이 가능한지 판별하였다. 1. 노란색 타일을 세우는 것이 가능하려면 for(i = 1, 1~노란색 타일 총 개수, i ++) -> 여기서 i는 세로의 갯수이다. - 세로의 갯수로 가로를 나누었을 때 나누어 떨어진다면, 노란색 타일을 세울 수 있는 것으로 판단하였다. 2. 갈색 타일을 세우고, 문제 조건에 맞는지 판별하였다. 세로 타일에 맞춰서 갈색 타일을 세우고, 그것이 문제 조건에 맞는지 판별하였다. 다른 사람 풀이
[SQL] 프로그래머스_어린 동물 찾기 젊은 동물의 아이디와 이름을 조회하는 문제이다. 이 문제의 예시를 잘 보아야 해결할 수 있다. 젊은 동물이라고 하면 나이 = "젊음"으로 해결하는 방식을 떠올리지만, 해당 문제에서는 Aged이외에 Sick, normal등 여러 가지 존재하는 것 같다. 그래서 젊음이라는 것을 뽑고 싶다면 Aged 나이가 많은 것들을 제외한 나머지가 된다. 답: SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION not in ("Aged") ORDER BY ANIMAL_ID ASC