본문 바로가기

코딩테스트 공부31

[C++] level2 후보키 42890 참고자료 해당 문제는 구글링을 통해 해결하였으므로 참고한 블로그를 상단에 첨부한다. https://velog.io/@huijae0817/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98C%ED%9B%84%EB%B3%B4%ED%82%A4 📌후보키 /* 해당 문제 설명은 링크로 대체한다. */ 📌풀이 먼저 후보키를 구하기 위해선 유일성과 최소성을 만족하는 조합을 찾아야한다. 그래서 내가 처음 생각해 낸 방식은 조합을 이용한 방식이다. 0, 1, 2라는 값이 있다면, 0에 대하여 0, 01,02, 012 이렇게 해서 가능한 모든 집합을 찾고, 처음에 가능한 조합을 next_permutation()만들어서 유일성은 확보하였지만, 최소성을 만족시키는 법을 찾지 못했다. 어려워 어떤 식으로 유일성과.. 2021. 8. 22.
[C++] 위클리챌린지 2주차 83201 📌2주차 상호평가 /* 해당 문제 설명은 링크로 대체한다. */ 문제가 어렵진 않으나 고려사항이 많아 조심해야 하는 문제! 📌풀이 문제를 처음 보고 오 1시간 컷으로 풀어보자 하고 시작했는데 약 2시간 넘게 걸린 것 같다 ㅎㅎ .......... 문제 설명에서는 행별로 평균을 구해서 학점을 매기는 방식이었는데 밑에 입출력 예시에서는 열별로 평균을 구해서 학점을 매기는 방식으로 설명되어있다. 사실 행열이 같고, 행열 모두 다른 사람 + 자기 자신이 점수를 매긴 것이기 때문에 열별로 평균을 구하는 식으로 풀이했다. 처음에 tc 10, 12, 16 실패하여 테스트케이스를 추가해서 문제를 풀어보았는데 유일한 최소점, 최고점인 경우를 고려하지 않았던 것 같다. 그래서 count() 함수를 써서 유일한 최소점, 최.. 2021. 8. 22.
[C++] level2 순위 검색 67257 참고자료 이 문제는 구글링을 통해 해결하였으므로 참고한 블로그를 상단에 첨부합니다. https://eunchanee.tistory.com/319 https://transferhwang.tistory.com/442 (비트 연산 이용하신 분! 코드가 더 간단) 📌순위 검색 /* 해당 문제 설명은 링크로 대체한다. */ 📌풀이 프로세스 info 배열에 각 행(문자열)에서 조건별로 문자열을 트리밍하여 점수로 보관 점수를 기준으로 오름차순 정렬 query 배열에 각 행(쿼리열)에서 조건을 나타내는 문자열을 얻어와 이진탐색을 통해 점수와 같은 값 중 가장 첫 번째 위치 값을 가져온다. 0. 필요 변수 초기화 vector answer(query.size(), 0); : query와 동일한 사이즈인 vector, 0으.. 2021. 8. 22.
[C++] level2 수식최대화 67257 📌수식최대화 /* 해당 문제 설명은 링크로 대체한다. */📌풀이 문제 처음 보자마자 우선 숫자와 연산자를 구분하여 보관해야겠다는 생각이 들었다. 문제에서 연산자가 3개일 때 3!, 2개일 때 2!를 보고 모든 연산자를 돌아야 하므로 연산자 배열을 별도로 생성하여 순열을 계산하고, 각 순열을 통과하여 얻은 결과 값을 비교하여 높은 값을 return 하는 식으로 구현해야겠다 싶었다! stack으로 담아둘까 하다가 그러면 우선순위대로 계산하지 못하고 원하는 부분의 연산자나 문자열을 꺼낼 수 없기 때문에 queue 도 생각해보았지만 vector가 적당한 것 같아서 vector로 담고 계산한 문자들은 erase로 지우도록 구현하였다. (다들 이렇게 구하는 것 같았다) 연산자의 우선순위는 next_permutati.. 2021. 8. 21.
[C++] level2 [3차] n진수 게임 17687 📌n진수 게임 /* 해당 문제 설명은 링크로 대체한다. */해설을 보면 다음과 같다 반복문과 진법 변환을 할 수 있다면 어렵지 않게 풀 수 있는 문제입니다. 진법 변환은 프로그래밍 언어를 처음 배울 때 연습 문제로 많이 풀어봤을 문제일 텐데요. 오래간만에 풀어보려니 쉽지만은 않았던 듯 싶습니다. 참고로 이 문제는 챔퍼나운 수라는 수학 상수를 이용한 문제입니다. 이 문제의 정답률은 91.85%였습니다. 대부분 잘 풀어주셨으나, 언어별로는 C++ 사용자들이 약간 어려워했습니다. 📌풀이 1부터 구해야 하는 문자열 t * m 만큼 반복문을 돌면서 전체 문자열str 구함 2진수는 반복문을 통해서 구하는데 num % n의 값이 10 이상이라면 A, B, C, D, E, F로 temp에 담음 2진수(0,1)의 경우 .. 2021. 8. 21.
[C++] level2 뉴스 클러스터링 17677 📌뉴스 클러스터링 /* 문제 설명은 링크로 대체 */📌풀이 먼저 문제에 몇가지 조건이 있다. 입력으로 들어온 문자열은 두 글자씩 끊어서 다중집합의 원소로 만든다. 자카드 유사도 방법을 이용한다. "AB"와 "Ab", "ab"는 같은 원소로 취급 (대소문자 구분 X) 원소의 중복을 허용하는 다중집합에 대해서 확장할 수 있다. ex. 다중집합 A = {1, 1, 2, 2, 3}, 다중집합 B = {1, 2, 2, 4, 5}라고 하면, *교집합 A ∩ B = {1, 2, 2}, 합집합 A ∪ B = {1, 1, 2, 2, 3, 4, 5} * 이를 바탕으로 다음과 같이 문제에 접근하였다. 자카드 유사도( J(a, b) = a, b의 교집합개수 / a,b의 합집합개수 )이라고 문제에 방법이 명시되어 있다. 집합 .. 2021. 8. 21.