본문 바로가기

전체 글93

[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.
[C++] level2 소수 찾기 42839 📌소수 찾기 /* 해당 문제 설명은 링크로 대체한다. */📌풀이 이 문제는 주어진 문자열에서 조각 조각으로 나눠서 소수를 찾아내는 문제이다. 이것은 next_permutation() 을 이용해야 함을 알 수 있다. 왜냐, 입출력 예시도 있지만 17이 주어질 때 7, 17, 71 이런 식으로 숫자로 구할 수 있는 경우의 수 중 소수를 골라서 count를 증가시켜줘야하기 때문이다. 그래서 나는 isPrime()를 통해서 소수를 먼저 찾았고, do-while()을 돌면서 해당 순열에서 숫자를 substr()로 뽑아내 소수라면 set에 담아두었다. set을 사용한 이유는 순열에 따라 만들어지는 소수가 이미 만들었다면 또 중복해서 담지 않기 위함 그리고 set의 size()를 반환하였다. 📌코드 #include .. 2021. 8. 31.