[Lesson1/C++] Codility - BinaryGap
·
PS/LeetCode & Codility
코딜리티로 시험 준비해야 할 일이 있어서 lesson에 있는 문제를 살짝 풀어보다가다른 코딩테스트 대비 플랫폼보다 히든케이스를 생각하는 부분이나,시간 복잡도를 확인하는데 더 도움이 될 것 같아서 계속해서 풀어가고 있다! lesson1은 Iterations을 주제로 가지고 있고, Easy 난이도의 문제가 하나 있다.0. 문제 간단하게 요약하자면, 1로 시작하고, 1로 닫히는 비트 중에서,1과 1사이에 있는 0의 개수가 가장 많을 때 그 개수를 출력하는 문제이다.만약에 그런 경우가 없다면 0을 출력해야한다.1. 문제풀이 및 코드먼저 10진수로 주어지는 숫자를 이진수로 만들 필요가 있었다.그리고 어차피 이진수가 0과 1이므로 그 이진수는 bool타입의 vector에 저장했다. 그리고 여기서 reverse를 한..
[백준/C++] 11055번 - DP (설명 포함)
·
PS/BaekJoon
예시로 이해하기i는 인덱스로 1부터 잡았고,a[i]는 입력되는 값이다.d[i]는 i까지 커지는 부분 수열 합의 최대 값이다. i번째 숫자마다 처음부터 자기자신 (i-1)전까지 숫자를 확인하면서자기보다 작다면 부분수열로 넣을지 말지 판단하면 되는데, 이 때 max를 이용해서 큰 수가 되도록 유지해야한다. 아래 예시를 통해 한 번 이해해보자. 코드#include using namespace std;int n;int a[1002];int d[1002];int main(){ ios::sync_with_stdio(0); cin.tie(0); cin>>n; for (int i=0;i>a[i]; for (int i=0;i
[백준/C++] 2468번 - BFS
·
PS/BaekJoon
문제 - 2468번문제는 위와 같다.아무 지역도 물에 잠기지 않을 수도 있다는 점을 처리하지 않아서테스트 케이스는 맞았으나 정답은 틀렸다는 결과를 받았다. 풀이와 생각의 흐름우선 연결된 영역의 개수를 찾는다는 점에서 BFS를 이용함을 알 수 있다. (BFS 문제를 많이 풀다보면 적어도 이 문제가 BFS를 활용하는구나는 알 수 있다. -> 나도 첨에는 몰랐었다...ㅠㅠ)물에 잠기지 않는 안전 영역의 개수가 최대인 경우를 다 조사해서 출력하는 문제이다. 그러면 (1)비의 정보마다 BFS를 진행하면 되고,각 BFS를 통해서 찾은 영역의 개수와 (2)기존의 개수를 비교해서 큰 값을 유지하도록 갱신하면 된다. (1) 비의 정보는 어디서,,?비의 양에 따라서 BFS를 진행해야하는데, 비의 정보가 문제에 없다.그래서..
[프로그래머스/C++] 알고리즘 고득점 키트 - 베스트앨범
·
PS/Programmers
문제와 예시 입출력 나의 접근 방법일단 장르별로 어떤 장르가 가장 재생이 많이 됐는지 확인해야 해서장르별 총 재생 횟수를 담는 해시 맵을 하나 생성했다.-> 아래 코드에서 hMap에 해당한다. 그 다음 단계로 해야하는 것은1) 가장 인기 있는 장르를 찾아서 2) 그 장르 내에서 가장 많이 재생된 노래 2곡의 고유 번호를 찾는것이다. 그러면 해시맵으로 저장해놓은 자료구조 (hMap)에서 가장 인기 있는 장르를 찾아야하는데,해시를 정렬할 수는 없으니... 비효율적인 것 같으나 벡터를 하나 더 만들어서 장르 이름과 장르별 총 재생횟수를 담았다. -> 아래 코드에서 top_genres에 해당한다.그렇게 만들어진 벡터 top_genres를 재생횟수에 맞춰 정렬했다. (comp 오버로딩을 했다.) 그리고 하나의 벡..
[프로그래머스/C++] 알고리즘 고득점 키트 - K 번째 수
·
PS/Programmers
#include #include #include using namespace std;vector solution(vector array, vector> commands) { vector answer; int i,j,k; for (int t=0;ttmp; for (int s = i; s - 나의 풀이 i, j, k를 분리해놓고, tmp 벡터에 i~j까지 슬라이싱 한 후,sort로 정렬해서 k번째 값을 읽어 왔다.- 다른 사람들의 풀이 파이썬에는 슬라이싱이 있지만, C++에서는 sort를 하면서 slicing이 되는 것처럼 구현한 것을 봤다.그렇게 하면 이중 for문 없이도 하나의 반복문으로 해결할 수 있게 된다. for(int i = 0; i k-1번째는 → temp[i-1 +..