※ participant 집합과 completion 집합의 차집합을 구하는 문제표준라이브러리에서 제공하는 < algorithm >헤더의 집합 알고리즘 함수를 사용한다.첫 번째는 집합 간 포함여부를 알려주는 함수,두 번째는 차집합,세 번째는 교집합,네 번째는 xor
※ 해시테이블을 이용하는 unordered 연관 컨테이너를 사용함nums집합에서 (사이즈/2)만큼 선택해야 하기 때문에 최대로 (사이즈/2)만큼 가질 수 있지만nums집합의 원소 종류가 (사이즈/2)보다 작을 수도 있다.따라서 원소 종류 개수와 (사이즈/2) 중 작은
각 단어들의 앞부분을 확인해서 단어가 같은 지 확인한다.다음 문자열을 자르는 함수이다.그 전에 인접 인덱스만 확인할 수 있도록 하기 위해컨테이너를 정렬해서 앞부분 숫자가 같은 단어끼리 붙게 만든다.배열의 원소들을 순차적으로 돌면서 해당 원소의 다음 원소를 확인해야 하기
해시 테이블을 이용하는 unordered_map을 사용하여 의상 종류 별로 모아둔다.1, 옷, a, 바지, 2, 옷 이 주어질 때 가능한 조합은1a21,a2,a이렇게 다섯가지이다.공식으로 만들면 3+(1\*2)가 될 것이다.이렇게 풀 수도 있겠지만 옷과 바지 뿐 아닌
해시 테이블을 이용하는 unordered_map 사용unordered_map에 저장되는 형식은 key : 장르, value : (고유번호, 재생 수)이다.unordered_map<string, vector<pair<int, int>>> hash_map;
간단하게 표준라이브러리에서 제공하는 unique를 사용하자.unique를 사용하고 나면 뒤에 부산물이 나오는데 알고리즘이 사용된 부분까지 이터레이터로 리턴되기 때문에 erase를 사용해서 뒤에 부분을 치우면 된다.실행결과1 3 0 1같은 숫자는 싫어 문제 링크
올림((100 - 개발진행률) / 작업속도) = 남은 작업기간여기서 올림 함수인 ceil을 생각했지만 다른 사람의 코드를 참고해서 이렇게 바꿨다.((99-개발진행률)/ 작업속도) + 1 = 남은 작업기간이걸로 쓸데없이 함수를 호출하는 일을 막았다.작업기간을 모아둔 컨테
문자열을 돌면서 '('가 나오면 +카운팅, ')'가 나오면 -카운팅을 해준다.카운트가 0이면 올바른 괄호이다. ')'가 처음부터 나오면 false를 리턴한다.실행결과false올바른 괄호 문제 링크
알고리즘 적용 후 위치와 값을 둘 다 확인해야 되는 문제일 때 인덱스만 들어있는 컨테이너로 쉽게 풀 수 있다.큐에 인덱스를 모두 넣어준 뒤 무한 반복으로 값을 체크하고 값이 나올 때 리턴한다.최댓값을 체크할 때는 max_element를 사용한다.max_element는
다리의 길이만큼 큐에 원소와 시간을 집어넣고 빼내오면 된다.queue<pair<int, int>> bridge;문제를 직관적으로 볼 때 큐에 원소와 다리길이 카운트를 쌍으로 집어넣으면 되겠다라고 생각할 수 있지만 다리길이 카운트 변수를 생성해서 계산하기 보다
첫 번째 원소 부터 끝까지, 두 번째 원소 부터 끝까지, ... 이런 식으로 검사를 반복하기 때문에이중 for문으로 두고 답이 나오면 break를 둬서 다음 반복으로 넘어간다.정답 컨테이너의 마지막 원소는 무조건 0이 되기 때문에 반복문을 빠져나온 후 0을 vector
더 맵게 문제 링크
디스크 컨트롤러 문제 링크
이중우선순위큐 문제 링크
이 문제를 요약하면 컨테이너를 자르고 정렬하고 원소를 고르는 문제이다.임시벡터를 하나 생성해서 이터레이터 범위에 있는 원소들을 복사한다.실행결과5 6 3K번째수 문제 링크
람다로 조건을 설정하여 정렬하면 짧은 코드로 쉽게 해결할 수 있다.문제 상황에서는 인접한 숫자끼리 이어붙였을 때 더 큰 수가 되도록 정렬해야 한다.여기서 리턴 값이 참이면 ab 순이 되고 거짓이면 ba 순이 된다.실행결과6210가장 큰 수 문제 풀이
처음에는 정렬하고 난 후 find_if로 이터레이터를 구하였지만 내가 어리석었다..인덱스를 +1씩 올리면서 조건에 맞는 원소의 개수를 확인하면 답이 나오는데내림차순으로 정렬하고 처음 원소부터 차례대로 인덱스의 크기와 비교한다면인덱스의 크기가 더 커지는 시점에서 조건에
내가 푼 문제 풀이와 추천을 가장 많이 받은 코드를 비교 분석을 해보겠다.풀이 메커니즘은 다음과 같다.루프를 돌면서 가로가 세로보다 크도록 바꾸기가로, 세로 각각 가장 큰 수를 얻어서 두 수를 곱하기1번을 하기 위해 루프를 돌아서 벡터들을 정렬한 다음max_elemen
map을 이용하여 점수를 키로, 학생의 인덱스를 놓고 점수가 높은 순으로 정렬하였다.학생은 어차피 순서대로 참조하기 때문에 정렬할 필요가 없다.이렇게 map에 데이터를 다 저장해 놓으면 스코어가 가장 큰 첫 번째 원소만 빼내면 되는데map 내부 메서드 중 front같은
푸는 데 엄청나게 많은 시간이 들었다. 코드는 신기하게도 짧지만 5시간은 넘게 고민한 것 같다.대학교 2학년 때 자료구조 과제를 할 때도 재귀함수 부분에서 막혔는데 여기서도 시간이 많이 걸린 걸 보면 내가 재귀함수에 많이 약한 것 같다... 그래도 혼자 힘으로 풀었으니
이전 문제와 같은 레벨 2지만 이전 문제에 비해 매우 쉬웠다.yellow의 약수를 구하고 yellow칸의 가로 세로를 먼저 설정한다.brown은 테두리 1칸으로 yellow칸을 둘러싸고 있기 때문에가로와 세로에 각각 +2를 해서 둘을 곱한 값이brown칸과 yellow
저번에 풀었던 소수찾기 문제에서 약간 변형을 해서 문제를 해결했다.던전들을 완전탐색해야 하기 때문에던전이 3개일 때 매개변수로 "012"를 넣으면 도출되는 조합은 다음과 같다.012021102120210201나온 결과에서 숫자 하나씩 던전 컨테이너의 인덱스로 접근하면가
DFS 알고리즘을 사용하여 문제를 해결했다. 이전 문제에서 사용했던 DFS 알고리즘과는 조금 결이 다른 것이이전 문제에서는 컨테이너의 접근 순서를 완전 탐색했고이번 문제는 그래프의 노드를 완전 탐색했다.그래프를 만들려면 정점마다 모든 선을 표현해야 한다.데이터가 다음과
DFS로 푸는 방법도 있긴 하지만 수학적으로 접근하는 것이 쉽고 코드도 더 빨리 돌아갈 것 같아 수학공식으로 풀었다.각 자리 수마다 알파벳이 한 칸 바뀔 때의 숫자가 정해져 있고 다음과 같다.첫 번째 알파벳 : 781두 번째 알파벳 : 156세 번째 알파벳 : 31네
set_difference라는 차집합을 구하는 표준 라이브러리 함수를 사용해서체육복이 두 벌인 사람이 잃어버려서 한 벌이 된 사람부터 두 벡터에서 제외시켰다.그 후 fint_if를 통해 체육복을 잃어버린 사람의 앞번호와 뒷번호를 확인해서 빌려줄 사람이 있을 때 rese
테스트 케이스를 모두 만족시키려 수정을 많이 하다보니 코드가 좀 길어진 감이 있다.상하로 알파벳을 변경하는 최소 횟수와 좌우로 글자 자리를 변경하는 최소 횟수를 따로 나눠서 구했다. 편하게 1번과 2번이라고 지칭하겠다.코드에 대해서 차근차근 설명해보겠다.다음은 1번을
스트링에서 숫자를 하나씩 가져와서 앞의 수가 뒤의 수보다 작을 때 앞의 수를 삭제하고 인덱스를 감소시키는 로직이다.가져온 수가 첫 자리이면 -1 감소시키고첫 자리가 아니라면 그 수를 삭제했을 때 양 옆에 있던 수끼리 크기 비교를 또 해야 하기 때문에i-2만큼 감소시킨다
처음에 작성한 코드로 문제는 해결하였지만 효율성 검사에서 실패해서 수정을 계속하다가 코드가 꼬여버렸다.아마도 for문 안에 erase함수를 넣었는데 O(n)의 함수이다 보니 실행속도가 느려진 것 같다.이 코드를 살릴 바에는 새로운 로직을 생각해보면 어떨까 싶어서 원래
오랫동안 고민했는데도 문제가 안 풀려서 결국 해답을 찾아봤다. 이 문제는 크루스칼 알고리즘으로 푸는 문제이다. 학교에서 배운 것 같긴 한데 알고리즘 공부를 많이 안 하다보니 어떤 알고리즘인지 잊어먹었다. 그래서 이번 기회에 최소신장트리와 크루스칼 알고리즘의 개념에 대해
문제를 풀고 테스트케이스를 30개 정도 구해서 전부 정답을 맞췄지만 프로그래머스에서는 맞은게 하나도 없다고 나온다...이러다간 시간만 낭비할 것 같아서 일단 답을 봤는데 엄청 간단하게 풀어져 있었다.애초에 문제를 접근하는게 잘못된 것 같다.🎉완성코드차량의 진입 지점으
코드를 풀기 전 먼저 동적계획법에 대해서 알아보았다. 동적계획법이란 간단하게 말하면 이전 과정에서 사용한 풀이를 재활용해서 푸는 것을 말한다. 과정을 계속 저장하는 풀이 방법이다.N 1개의 계산식부터 8개의 식까지 탐색해야 하는데 dp벡터에 결과를 저장해 놓고N의 개수
이 문제는 몇년전에 내가 풀다가 포기했던 기록이 남아있었다. 근데 지금은 동적계획법 문제를 푸는 방법을 알고나니 빠른 시간 내에 해결했다.각 층마다 triagle의 크기와 저장하는 값의 크기가 동일하기 때문에 triagle의 데이터를 갱신하면서 풀었다.각 층의 처음과