본문 바로가기

HOME

(207)
[프로그래머스/약수 찾기] 약수의 개수와 덧셈 (나를 위한 기록) 문제 설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ left ≤ right ≤ 1,000 입출력 예 left right result 13 17 43 24 27 52 입출력 예 설명 입출력 예 #1 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다. 수 약수 약수의 개수 13 1, 13 2 14 1, 2, 7, 14 4 15 1, 3, 5, 15 4 16 1, 2, 4, 8, 16 5 17 1, 17 2 • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 ..
[프로그래머스/파이썬] 최소직사각형 해설 및 증명 문제 문제 설명 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고 다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다. 명함 번호 가로 길이 세로 길이 1 60 50 2 30 70 3 60 30 4 80 40 가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다...
[Firebase/unsolved.ac/7] Firebase 데이터베이스 csv로 변경하기 DB를 몽고 DB로 변경하기 전 파이어베이스에 있는 자료를 살릴 수 있다면 살리기로 마음먹었다. 물론 테이블을 엎게 되어서 형태 그대로 사용할 순 없지만 안에 데이터라도 살릴 수 있다면 시간이 절약될 것이라고 판단했다. (사실 다 csv로 다운받고 보니 몇개 안되서 api호출 조금 더 하는게 이득이었을 수도) 1. Firebase cloud firestore 접속 후 -> 구글 클라우드 추가 기능 -> 가져오기/내보내기 클릭 2. 내보내기를 누른 후 원하는 데이터를 선택 전부를 선택하면 아래와 같이 나오고 내보내기 위해서 결제를 등록하라고 하는데 금액은 따로 청구되지 않는 것 같다. 3. 이후 클라우드의 BigQuery를 누른 후 데이터 세트 추가를 한다. 4.테이블 만들기를 누른 후  양식 입력 소스..
[프로그래머스/파이썬] 2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도 문제 해석 문제 설명 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다. "지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다. 암호화된 ..
[프로그래머스/파이썬] 성격 유형 검사하기 문제 해석 문제 풀이 결국 각 문항마다 점수를 부여하는데 (매우 비동의 3점) ~ (모르겠음 0점) ~ (매우 동의 3점) 이라고 생각하면 각 문항에 대해 한 가지 성격 유형을 음수 다른 나머지를 양수로 지정하고 계산하면 되는 것이다. 조금 복잡하지만 최대한 간단한 방법은 map을 이용하는 방법이라고 생각했다. 요즘 특히 프로그래머스 lv.1에 map을 이용한 풀이 문제가 참 많아서 바로 map을 떠올리기도 했다. (이렇게 유형타면 실제 코테에서 말아먹을텐데... 자꾸 게으르게 편한 방법을 생각한다.) 우선 나는 한가지 성격 유형을 map으로 지정해주고 그 유형이 앞글자라면 동의를+3점으로 그 유형이 뒷글자라면 비동의를 +3점으로 처리하였다. 이후 각 점수에 대한 결과로 양수면 지정된 성격 유형을 반대라..
[프로그래머스/C++] 달리기 경주 풀이 문제 해석 문제 풀이 처음에 이름을 부른 이후 추월을 어떻게 계산해주어야 할까 고민하다가 단순 구현인가 하고 callings의 길이를 보았더니 100만이라 각 플레이어가 불릴 때마다 배열을 swap해주는 형태는 시간 초과가 날 것 같았다. 그럼 배열을 O(1)이나 O(nlogn)만에 찾아줄 수 있는 방법이 필요했다. map 사용을 생각하였으나 하나로 풀 방법을 몰라 2개로 구현했었다. 하나에는 선수의 이름을 넣으면 등수를 알려주고, 다른 것에는 등수를 넣으면 이름을 알려주도록 짰는데 다른 정답 코드들을 보니 map하나로도 충분하다. 코 드 #include #include #include using namespace std; vector solution(vector players, vector callin..
[프로그래머스/C++] 디스크 컨트롤러 풀이 문제 해석 문제 풀이 운영체제 시간에 배운 CPU Job scheduling 문제 같았다. 처음에 activity selection problem으로 생각해서 헤맸는데 우선순위 큐 문제이다. job을 시작 시간 기준으로 오름차순 정렬한다. 현재 시간보다 작거나 같은 job을 모두 우선순위 큐에 넣는다. 우선순위 큐는 빨리 끝나는 job을 top으로 올리도록 설정한다. job을 실행한 후 큐에서 pop한다. 2~4번을 큐가 빌 때까지 반복한다 코 드 #include using namespace std; struct compare { bool operator()(vector lhs, vector rhs) { return lhs[1] > rhs[1] ; } }; int solution(vector jobs) ..
[백준/C++] 2252번 줄 세우기 (Topology sort) 문제 해석 문제 풀이 코딩테스트 준비하면서 위상 정렬은 알고 있어야지~ 싶어서 한 문제 풀려고 찾아본 문제이다. 위상 정렬이 기억나지 않아 푸는데 좀 헤맸다. 문제 풀이에 들어간 내 의식의 흐름은 아래와 같다. 우선 배열(인접행렬)로 생성하면 3만 x 3만으로 128MB는 훌쩍 넘어 터질 것 같아 인접리스트(adjacency list) 형태로 구현하였다. 만약 한 번도 누군가의 뒤에 선다는 정보가 없었던 사람이 있다면 모두 큐에 넣어주고 순서대로 출력하면 되겠다 싶었으나 (반례: 4,4 1->2 2->3 4->3 4->1 형태로 준다면 단순 bfs로는 해결할 수 없고 응용해야한다는 것을 알게 되었다. bfs에서 생기는 반례는 결국 내 이전 작업이 끝나지 않았는데 내가 먼저 queue에 들어가서 생기는 문..