ACM준비 85

개인정보 수집 유효기간

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..