ACM준비 96

택배 배달과 수거하기

https://school.programmers.co.kr/learn/courses/30/lessons/150369 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 택배 배달과 수거하는 과정을 만족하면서 최소 이동 거리를 구하는 문제이다. 택배 배달과 수거하는 과정은 배달을 끝내고 수거를 하는 과정에 연속이며, 택배를 배달하면서 이동한 거리만큼은 다시 물류센터로 돌아오기 때문에 수거하는 과정을 같이 진행할 수 있다. 모든 집에 배달 및 수거를 진행하기 위한 순회 ( N ) 과 집 마다 배달 및 수거를 분배하는 순회 ( N ) 이 요구된다. O ( N^2 )..

개인정보 수집 유효기간

https://school.programmers.co.kr/learn/courses/30/lessons/150370 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 주어진 데이터에서 규칙에 맞는 데이터를 찾는 과정이 필요합니다. "현재 시간" 에서 "개인 정보의 시간" 의 차이가 유효 기간에 포함되는 지 판단합니다. 특별한 알고리즘이 필요하지 않으므로 N 시간에 해결할 수 있습니다. * formatting 을 위해 Date 를 사용했습니다 function solution(today, terms, privacies) { var answer = []; var ..

올바른 괄호의 갯수

https://school.programmers.co.kr/learn/courses/30/lessons/12929 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 카탈랑 수 를 알면 쉽게 풀 수 있는 문제입니다. 저는 카탈랑 수를 몰랐기에 다른 블로거 분의 도움을 받아서 해결했습니다. 참고 function solution(n) { const c = new Array(n + 1).fill(0); c[0] = c[1] = 1; // c(n) = E(i=0..n){C(i)*C(n-i)} function get_c(i) { if(c[i] != 0) return c..

쿠키 구입

https://school.programmers.co.kr/learn/courses/30/lessons/49995 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 전체 쿠키를 순회하며 O ( n ) index ( m ) 를 기준으로 좌우에 최대 쿠키를 구합니다. 현재 기준 ( m ) 으로 부터 index ( left, right ) 를 움직이며 최대 쿠키를 찾습니다 O ( n ) 현재 쿠키가 같더라도 더 이상 움직일 index 가 없을 때까지 순회하여 전체 쿠키에서 가장 큰 쿠키를 구합니다. 총 O ( n^2 ) 에서 해결됩니다. function solut..

자동완성

https://school.programmers.co.kr/learn/courses/30/lessons/17685 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 입력받는 키워드 ( char ) 를 tree 로 만들고, 각 키워드를 순회하며 중복되지 않은 ( 겹치는 단어가 없는 ) node 에 도달하면 해당 node 의 depth 가 단어를 검색하는데 필요한 최소 단어 갯수이다. tree 를 만드는 전체 과정은 O(N*2) 이 수행되고, 단어를 찾는 과정은 O(N) 이 수행된다. function solution(words) { var rootDict = n..

무지의 먹방 라이브

https://school.programmers.co.kr/learn/courses/30/lessons/42891 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음에는 음식을 순회하면서 O(N^2) 문제를 접근했다. N = 음식, N = 시간 음식은 Set 에 등록하여 다 먹은 음식은 Set 에서 제거하는 방법으로 마지막 음식 ( t + 1 ) 의 index 를 구하여 정확성 테스트를 통과했지만, 효율성 테스트에서는 실패했다. 고민을 하다.. 다른 사람의 아이디어를 도움 받아 n 초 만큼의 음식을 먹는 과정을 O(1) 로 줄일 수 있었다. 아이디어는 음..

호텔 방 배정

https://school.programmers.co.kr/learn/courses/30/lessons/64063 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr room 안에 배정된 인원 수가 1 명이므로, has 검사만으로도 충분하다. 요청받은 방 번호가 invalid 하다면, 그 다음으로 큰 번호의 방이 할당되어야 하는데, iter 를 돌리다보면 O(n) 이 발생하고, 결국 O(n*2) 이 되므로 indexing map 을 두어 접근했다. 방을 찾고, 다음에 요청되는 경우 할당 가능한 방을 찾아 이전까지 순회했던 방들의 indxing 도 같이 upda..

문자열 집합 판별

https://www.acmicpc.net/problem/9250 9250번: 문자열 집합 판별 집합 S는 크기가 N이고, 원소가 문자열인 집합이다. Q개의 문자열이 주어졌을 때, 각 문자열의 부분 문자열이 집합 S에 있는지 판별하는 프로그램을 작성하시오. 문자열의 여러 부분 문자열 중 하 www.acmicpc.net Rabin-Karp Set을 사용해서 접근했음. 시간초과;; 구현이 잘못된건가ㅜ typedef struct{ char pattern[101]; int length; int h; int p; int dp; } rk; rk S[1001]; int d = 25, q = 101; int N, Q; void gHash(int index) { S[index].length = strlen(S[index..

ACM준비/acmicpc 2015.12.05

E_Log Jumping

2015 acm-icpc 예선 Problem E Log Jumping 시작을 가장 큰 기둥을 양 끝의 기둥으로 선택하고 반복적으로 가장 큰 기둥을 2개씩 선택하여 이전의 기둥과 높이차를 구한다. 더 이상 선택할 기둥이 없을 때까지 선택한 두 기둥의 가장 큰 높이차를 기록한다. using namespace std; int main() { int T; for (scanf("%d", &T); T--;) { vectorLog; int N; scanf("%d", &N); for (int i = 0; i < N; i++) { int L; scanf("%d", &L); Log.push_back(L); } sort(Log.begin(), Log.end()); int des = Log.size() - 1; int Ret..