본문 바로가기

코딩테스트 공부31

[C++] 위클리챌린지 6주차 복서 정렬하기 85002 📌문제 /* 해당 문제 설명은 링크로 대체한다. */ 📌풀이 vector score; //first : idx, second-first : 이긴 횟수, second-second : 승률 다음과 같은 vector 변수를 저장해두고, weight 배열을 돌면서 각 idx 별 승률과 이긴 횟수를 구해 score에 넣어주었다. 그리고 score를 정렬 조건에 맞춰 정렬해준 다음 answer에는 idx 값만 추가하여 return 하는 방식으로 풀었다. 문제 자체는 어렵지 않으나 승률 구하기와 정렬에 주의해야 한다! vector에 weight 값도 같이 넣어주면 더 정렬이 깔끔해지고 불필요한 temp 변수를 사용하지 않아도 될 것 같은데 vector에 3개 이상 넣어서 정렬해본 적이 없어서 따로 빼서 계산하는 식으.. 2021. 9. 6.
[C++] level3 이중 우선순위 큐 42628 📌이중 우선순위 큐 /* 해당 문제 설명은 링크로 대체한다. */📌풀이 우선순위 큐를 2개 사용한다. 1개는 오름차순으로 정렬되는 큐, 1개는 내림차순으로 정렬되는 큐. I연산이 일어날 때 숫자를 각 큐에 넣어주고, D연산이 일어날 때 -1인 경우 오름차순 정렬 큐에서 가장 앞에 원소(최소값)을 빼주고, 1인 경우 내림차순 정렬 큐에서 가장 앞에 원소(최대값)을 빼준다. 주의할 점 I연산이 일어날 때 2개 큐에 값을 넣어주고 삭제 연산은 경우에 따라 1개씩 해준다. ex. 3번 삽입이 일어나고 2번 D -1, 1번 D 1 일어났다고 가정할 때 오름차순 큐는 2개, 내림차순 큐는 1개 남는다. (균일하게 큐 사이즈를 갖지 못함) 큐 사이즈가 균일할 수 있도록 별도로 cnt 변수를 두어 0이 된 경우에 각 .. 2021. 9. 5.
[C++] level1 체육복 42862 📌체육복 /* 해당 문제 설명은 링크로 대체한다. */ !주의! ※ 공지 - 2021년 8월 30일 테스트케이스가 추가되었습니다. 📌풀이 먼저 체육복 여부를 확인하는 check 변수를 만든다. 얘는 n+1짜리로 만들고 1로 초기화하고 시작했다. 0 : 체육복을 가져오지 않은 애들 1 : 체육복을 챙겨온 애들 2 : 체육복을 여분도 가져온 애들 먼저 lost 배열과 reserve 배열을 오름차순으로 정렬해주어야 한다. //테스트케이스 13번, 14번 예외처리 왜냐. 문제에서 잃어버린 애들과 여분을 가져온 애들을 배열로 주어준다고만 했지 정렬해서 넣어줬다곤 안했기 때문에 13번, 14번에 [1,2,3,4,5] 같이 정렬된 친구들이 아닌 [4,5,2,1,3]과 같은 친구들이 오는 것 같다. lost와 rese.. 2021. 9. 1.
[C++] level2 큰 수 만들기 42883 📌큰 수 만들기 /* 해당 문제 설명은 링크로 대체한다. */📌풀이 문제를 보면 숫자에서 두 수를 제거해서 만든다고 명시되어 있는데 앞에서부터만 지울 수 있다는 건 명시되어 있지않다 ... 하지만 입출력 예시를 보면 앞에서부터 작은 수를 제거한다..... 주의하자 ! 먼저 문자 수가 4자리인데 k만큼 뺀 수를 제거하면 2자리만 출력하면 된다. 그래서 for문은 number.size() - 2 한 값 만큼 돌려주었다. 그리고 for문 안에서 가장 큰 value 값을 구해서 idx 갱신하며 가장 큰 값들만 answer에 더해주었다. 이 풀이의 주의점은 for문 내 for문에서 첫번째 인덱스부터 검사해주기 위해 idx를 초기에 -1로 설정한 점이다! 📌코드 #include #include using names.. 2021. 9. 1.
[C++] level2 구명보트 42885 📌구명보트 /* 해당 문제 설명은 링크로 대체한다. */📌풀이 문제에서 2명까지만 태울 수 있다고 명시되어 있다! 그렇기 때문에 2명까지만 고려하면 된다! greedy하게 푸는 문제에 포함된 문제이다. 먼저 오름차순으로 정렬한다. 그러면 입출력 예시의 경우 50, 50, 70, 80으로 people이 정렬된다. 이 상태에서 idx를 옮겨가며 2명을 태울 수 있으면 태우고 못태우면 큰 값부터 태운다. 📌코드 #include #include #include using namespace std; int solution(vector people, int limit) { int answer = 0; sort(people.begin(), people.end()); //오름차순으로 정렬 //input1 ex. 50,.. 2021. 9. 1.
[C++] level1 모의고사 42840 📌모의고사 /* 해당 문제 설명은 링크로 대체한다. */📌풀이 이 문제는 완전탐색 분류에 속해있는 문제이다. 그래서 완전탐색 그 자체로 풀이했고, 풀이한 뒤 보니 보통 이렇게 풀이하는 것 같았다. 문제는 금방 풀어낼 수 있다! 문제에서 1번, 2번 3번 수포자가 찍는 방식을 정해주었기 때문이다. 1번 수포자가 찍는 방식: ** 1, 2, 3, 4, 5, ** 1, 2, 3, 4, 5, ... 2번 수포자가 찍는 방식: ** 2, 1, 2, 3, 2, 4, 2, 5 **, 2, 1, 2, 3, 2, 4, 2, 5, ... 3번 수포자가 찍는 방식: ** 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 **, 3, 3, 1, 1, 2, 2, 4, 4, 5, 5, ...위에서 *로 표시해두었지만 저 순서대.. 2021. 8. 31.