코딩테스트 준비하기 - (4) Prefix Sums
prefix sum은 부분합 배열을 의미한다. 개념은 단순하다
다음과 같은 배열 A가 있다.
A = [ 1, 4, 6, 3, 7, 9 ]
이때 배열 A의 prefix sum, 즉 부분합 배열 K는 아래와 같다
K = [ 1, 5, 11, 14, 21, 30 ]
상당히 간단한 개념이다. 고등학교 수학시간에 배웠던 것 같은데. 여튼 prefix sum의 장점은 구간의 부분합을 쉽게 구할 수 있다는 점이다.
즉, A[3] + A[4] + A[5] = K[5] - K[2]이다.
Question 1 - CountDiv
1 | Write a function: |
- 주어진 A와 B 사이의 숫자들 중 K로 나누어질 수 있는 수의 개수를 반환하라.
- 나누어 떨어진다의 기준이 X%K == 0 인것이 함정. 0%K == 0이므로 A,B가 0인 경우에 대한 예외처리가 필요했다.
- 엄청 간단하다고 생각했는데 내가 늘 그렇듯 자꾸 대충짜서 내니깐 edge case에서 예외가 많이 걸림…
- Codility는 테스트 케이스를 너무 조금준다ㅠㅠ 예외경우도 생각하는게 물론 개발자의 역량이라지만 코딩보다 테스트가 오래걸려서 답답한걸 어카나요..^^ㅠ
My Solution(100%)
1 | // you can use includes, for example: |
- 지금 풀고나니 생각나네 아… 이걸 그냥 부분합으로 풀걸;;;; 개멍청쓰;;
Question 2 - MinDnaSequence
1 | A DNA sequence can be represented as a string consisting of the letters A, C, G and T, which correspond to the types of successive nucleotides in the sequence. Each nucleotide has an impact factor, which is an integer. Nucleotides of types A, C, G and T have impact factors of 1, 2, 3 and 4, respectively. You are going to answer several queries of the form: What is the minimal impact factor of nucleotides contained in a particular part of the given DNA sequence? |
- 문제가 엄청길다ㅜㅠ
- Nucleotide는 총 4가지가 있다. 각각은 정수값 impact factor과 매칭된다.
- A:1, C:2, G:3, T:4
- N개의 문자열로 이뤄진 DNA sequence가 있다.
- 길이 M의 non-empty array P, Q 가 있다.
- Query K는 다음을 의미한다
- DNA sequence의 P[K]와 Q[K] 위치 사이의 minical impact factor를 찾아라
My Solution(67%)
1 |
|
- 로직은 얼추 맞는듯 한데 large dataset에서 런타임 에러가 발생한다. push_back이 너무 느린건가..
Question 2 - MinAvgTwoSlice
1 | A non-empty array A consisting of N integers is given. A pair of integers (P, Q), such that 0 ≤ P < Q < N, is called a slice of array A (notice that the slice contains at least two elements). The average of a slice (P, Q) is the sum of A[P] + A[P + 1] + ... + A[Q] divided by the length of the slice. To be precise, the average equals (A[P] + A[P + 1] + ... + A[Q]) / (Q − P + 1). |
My Solution(60%)
- memset 사용시에는 string.h 헤더 포함해야 한다.
1 |
|
- 아이디어가 안떠올라서 일단 가장 간단하게 구현한 코드..ㅠ O(N^2 / 2) 이므로 당연하게도 timeout error가 났다.
- 구글신의 힘을 빌렸다. 아주 그냥 수학문제다 머리아파;;
: https://nukeguys.tistory.com/175
Question 3 - 괄호변환
- 디스크 겹치는거 풀다가 도저히 머리가 이해를 못해서 카카오 신입채용 문제로 급선회
- 익숙한 dfs문제이다.
- stack의 top()연산은 stack이 비어있으면 Segmentation fault에러가 발생한다.
My Solution(100%)
1 |
|