코딩

코딩테스트

[프로그래머스 고득점 kit] 입국심사 ( C++ )

https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위의 문제에 대한 풀이입니다. 우선 처음 단순히 생각하면 1명 처리 -> 처리 시간 입력, ...... n명 처리 -> 처리 시간 입력으로 입국 심사 횟수 N을 기준으로 O(N) 짜리 풀이를 생각했다. 하지만 이럴 경우, 10억회의 연산 발생으로 시간초과가 난다. (이 오답 풀이는 맨 아래에 첨부하겠다.) 따라서 O(N) 보다 빠른 풀이, 혹은 심사위원의 수 ( 10만 ) 으로 문제를 굴려야 하는..

카테고리 없음

[2021 카카오 채용 연계 인턴십] 표 편집 (c++)

https://school.programmers.co.kr/learn/courses/30/lessons/81303 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위의 문제에 대한 해설입니다. 우선 문제의 효율성 테스트를 통과하려면 꽤 큰 input에도 대처가 가능해야하는데, 이 때문에 문제 그대로 단순히 삽입, 삭제를 그때 그때 수행하는 것 만으론 시간복잡도가 오버된다. 따라서 삽입, 삭제를 실제로 행하지 않거나, 혹은 실제로 삽입, 삭제를 진행하되, 그 효율을 좋게 만들어야만 해결할 수 있다. 내 경우는 linked list 자료구조를 통해 해결했다. ..

코딩테스트

[카카오 2020 블라인드 코딩테스트] 문자열 압축 (c++)

https://school.programmers.co.kr/learn/courses/30/lessons/60057 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위의 문제에 대한 풀이입니다. 우선 문제를 보면 무식한 방식으로 풀어도 될거같다는 느낌이 옵니다. 제한사항을 보면 문자열 길이가 1000이하로 주어졌는데, 반복가능한 문자열 단위는 최대 500입니다. 그 이유는 전체 문자열 길이의 절반을 넘어가면 반복되는 문자열을 통한 압축이 불가능해지기 때문입니다 ex: aaaabb >> 길이 단위를 4로 해도 2aaaa 이런식으로 압축이 불가능합니다. 길이가 ..

코딩테스트

[2021 카카오 블라인드 코딩테스트] 택시 합승 (c++)

https://school.programmers.co.kr/learn/courses/30/lessons/72413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위의 문제에 대한 풀이입니다. 이번엔 오답+ 정답 코드를 포스팅하는데, 우선 정답 먼저 보겠습니다. 택시합승이란 문제는 결국 어느지점까지 합승할지? 를 해결하면 풀 수 있습니다. 따라서 플로이드 와샬 알고리즘을 통하여 모든 노드들 간의 최단거리를 찾고, 어떤 합승지점에서 최소 값이 나오는지 linear 탐색을 통해 찾으면 해결됩니다. 아래는 해결 코드입니다. #include #include #in..

코딩테스트

dp를 찾는 방법. [interval dp], 백준 11066번

dp는 상황을 나누고, 그 간의 관계를 파악하여 점화식 혹은 a=b와 같은 고정된 수식으로 표현하여 문제를 효율적으로 해결하는 방식이다. 예를 들어 동전이 연속으로 앞면이 나올 확률을 구한다고 생각해보자. 모든 상황은 결국 나누면 앞면, 뒷면 으로 나뉜다. 이를 수식으로 표현해보자. n-1 째까지 앞면 나올 확률 * 앞면 나올 확률 = n 째까지 앞면 나올 확률 즉 f(n-1)* 1/2 = f(n) 이라는 점화식을 구할 수 있다. dp는 이런 특정 행동 (동전을 던짐) 에 따른 관계의 변화를 수식으로 표현해서 구할 수 있다. (특정행동 n-1번 = 특정행동 n번 이런식으로 생각하면 쉽다.) 전에 knapsack 알고리즘에 대해서도 정리했었는데, dp라고 생각하고 식을 구해도 해결할 수 있다. 추가로 in..

코딩테스트

백준 14595 동방탈출 c++ (분리 집합 응용)

분리집합 응용문제를 하나 들고 왔습니다. 분리집합에 관한 기본적인 지식은 생략하고 해당 문제의 핵심 아이디어만 아래 코드블럭의 주석에 구체적이게 달아 놓았으니 참고하세요! #include using namespace std; #include int n, m,cnt; int arr[1000000]; int find(int a) { if (arr[a] == a) return a; else return arr[a] = find(arr[a]); } void join(int a, int b) { a = find(a); b = find(b); if (a == b)return; arr[a] = b; //두번째 파라미터가 첫번째 파라미터의 부모가 된다. } int main() { scanf("%d %d", &n, &m..

코딩테스트

[백준 14939번 , 1208번] 백준 문제로 배우는 비트 마스킹

비트 마스킹 (bit masking) 이란? 이진수와 관련된 개념이다 이진수 110 은 2^2+2^1 으로 십진수 6을 표현한다. 그리고 이진수는 또다른 원론적인 의미로 해석될 수 있는데 바로 true false다. 즉 110 은 단순 십진수 6 뿐 아니라, 첫째, 둘째 놈은 true, 셋째 놈은 false 로 의미 부여를 하고 갈 수 도 있는것. 이번엔 거꾸로 가보자. 눈앞에 10개 버튼이 있는데, 나는 각버튼을 누를 수 도, 누르지 않을 수도 있다. 내가 버튼을 누를 수 있는 경우의 수는? 간단한 수학이다. 누른다, 안누른다 = 2 2^10= 1024 가지 경우의 수가 나온다. 아래 이진수에 부여한 의미를 생각해보자 0000000000 == 십진수 0 >> 전부 버튼을 누르지 않는다 000000000..

코딩테스트

최장 증가 수열(LIS), 최장 공통 문자열(LCS)

lis는 10, 20, 10, 30, 20, 50 이런 길이 5의 수열중 10, 20 ,30 ,50 과 같이 계속해서 증가하는 수열들 중, 가장 긴 수열을 찾는 문제다. 우선 lcs는 푸는 방식이 정말 다양한데, 전부 시간 복잡도가 다르다. dp를 통해서 풀게되면 O(N^2) 이고, lower_bound를 통해서 풀게 되면 O(NlogN) 의 시간 복잡도가 발생한다. lis 문제는 시간초과를 가지고 장난을 많이 치기에 lower_bound 방식만 가지고 문제를 풀어보겠다. 자세한건 아래 문제를 보면서 알아보자..! 1.lis 의 길이는? lis의 길이를 구하는 문제로, 위 의 입력의 경우 10,20,30,50 이기에 4가 정답입니다. 흔히 전깃줄 문제로 응용 됩니다. 자세한 건 아래 문제를 확인 해봅시다..

코앤미
'코딩' 태그의 글 목록