후보키 해결방법 후보키로 나올 수 있는 방법은 해당 어트리뷰트의 부분집합이 됩니다. 이것은 조합으로 구하고 해당 집합에 대한 칼럼을 벡터(배열)에 그 벡터 통채로 map의 KEY로 집어 넣었습니다. 그래서 Key가 같으면 후보키로 성립하지 않게 되는 것이죠. 이렇게 구하면 유일성은 걸러낼 수 있습니다. 그 다음 최소성을 만족하기 위해 남은 부분집합들은 부분집합끼리 포함되는 관계에서 포함시키는 부분집합을 제거해줘야 최소성을 만족 시 킵니다. 소스코드 #include #include #include #include #include using namespace std; void combination(vector &combinations, vector order, vector value, int current_..
블록게임 문제를 너무 막 풀어서 코드가 너무 길어버렸네요;; 가로 2X3 세로 3X2 가능한 블록만 모여나서 하나하나 비교하는 형식으로 풀었습니다. 비교했는데 비교한 전부 비교가 가능하면 지워나가는 형식으로 했습니다. possible배열은 가장 위에 어떤 블록이 있는가를 설정해서 벽이 있으나 해당 줄에 2개가 있을 경우 qqq(이름 뭘로 지을지 몰라서 막지음)변수에 저장, qqq가 2개 있을 경우 검은 블록을 안떨어뜨려도 된다고 코드를 짰습니다. 소스코드 #include #include #include #include using namespace std; bool checkgaro(vector &possible, vector &board, int i, int j, int &answer); bool che..
실패율 해결 방법 각 단계마다 스테이지에 도달했으나 아직 클리어하지 못한 플레이어수각 단계마다 스테이지에 도달한 플레이어 수를 다 구해줘야 합니다. N단계까지를 index 2개를 만들어줍니다(pass, notpass) stage벡터에 한개씩 데이터를 읽는데 3단계에서 멈춘사람은 notpass배열 3번째 인덱스를 증가시켜주고 pass배열에 1~3를 증가시켜줘야합니다.이렇게 다 돌면각 단계마다 실패율을 구할 수 있고 인덱스와 실패율을 저장한 구조체를 정렬해서 결과값을 받아오면 됩니다. 소스 코드 #include #include #include using namespace std; struct Result { int number; double fail; }; bool pred(Result a, Result b..
오픈채팅방 해결 방법istringstream를 이용하면 공백을 token으로 분리할 수 있습니다. 그리고 map을 통해서 으로 Key, Value를 잡고Enter와 Change를 만날때마다 계속해서 유저아이디의 닉네임을 계속 바꿔줍니다.그리고 다시 처음부터 해서 바꿔진 유저아이디+메시지로 반환해주면 됩니다. 소스 코드 #include #include #include #include using namespace std; vector solution(vector record) { vector answer; vector log(record.size(),vector(3)); map user; for (int i = 0; i > log[i][0]; iss >> log[i][1]; iss >> log[i][2]; ..
무지의 먹방 라이브 저는 왜 이런게 어려울까요. 입출력 예 food_times : [3,1,2]k : 5result : 1 해결방법 보면 문제가 굉장히 쉬울 줄 알았습니다만 큐에다가 원하는걸 food_times 인덱스들을 담고 k를 1개씩 검사하는 알고리즘으로 채점을 하면 시간초과로 틀려버렸습니다, 이리저리 해매다가 코드가 복잡해버려졌네요. 제가 생각하는 방법은 k를 한바퀴씩 가야되겠다고 생각했습니다. 예제를 보면 1번 음식이 3번이기 때문에 1번음식을 기준으로 한바퀴씩 돌려야 한다고 생각했습니다.가장 큰 인덱스를 구하는 max_index를 구했습니다. 여기서 인덱스가 중간에 있으면 0번부터 max_index까지 1번씩은 섭취했기 때문에 food_times를 1개씩 빼야 했습니다.그리고 한바뀌 돌때마다 ..
길찾기 게임 입출력 예 nodeinfo : [[5, 3], [11, 5], [13, 3], [3, 5], [6, 1], [1, 3], [8, 6], [7, 2], [2, 2]]result : [[7,4,6,9,1,8,5,2,3],[9,6,5,8,1,4,3,2,7]] 해결 방법 이진 트리를 만드는 방법은 보통 2가지로 알고 있습니다. 첫번째는 배열을 통해서 2를 곱했을때와 왼쪽 트리, 2를 곱하고 1를 더했을 때 오른쪽 트리를 이용해서 문제를 풀어 나갈 수 있고 클래스나 구조체를 이용해서 linked list 형식으로 왼쪽 link와 오른쪽 link로 이동하는 방법을 통해서 구현할 수 있습니다. 저는 후자를 선택했는데요 인덱스 값을 저장해야하기 때문에 nodeinfo에 각각의 인덱스 번호 값을 추가했고, ..
파일명 정렬 문제풀다가 몰라서 해설을 보았습니다. sort에서 stable_sort로 바꾸자마자 통과되네요 ㅠㅠ 입출력 예제 입력 값 : ["img12.png", "img10.png", "img02.png", "img1.png", "IMG01.GIF", "img2.JPG"] 출력 값 : ["img1.png", "IMG01.GIF", "img02.png", "img2.JPG", "img10.png", "img12.png"] 해결 방법 2차원 배열로 이용해서 head와 number를 구해줍니다. 저는 그냥 while문 돌려가지고 숫자가 나오기 전까지 head 그다음 문자가 나오기 전까지 number로 하고 남은 것은 tail에 붙여줬습니다. 나중에 이어붙여야 하기 때문이죠 그리고 2차원 배열을 정렬 함수를 ..
자동완성 코드 엉망이네 멋지게 푸는 방법을 모르겠습니다 ㅠㅠ; 입출력 예제 words : ["go","gone","guild"] result : 7; 해결 방법 저는 이 문제를 풀기 위해서 트리구조를 이용했습니다. 문자만 있기 때문에 해당 문자의 이어지는 tree를 계속 이어서 만들었습니다. words를 길이순으로 정렬해줍니다. ex) gone이 go보다 먼저 있을 경우 안됩니다.(적어도 제코드에서는) 그리고 데이터를 집어 넣는데 입출력 예제를 예시로 처음에 go를 먼저 할때 g라는 트리에 count를 1 증가 시킵니다. 그다음 g의 o위치의 트리를 만들어서 o 위치의 트리로 이동한 후 count를 1 증가시킵니다. 그리고 마지막이라는 것을 표시하기 위해서 o번째에 flag를 달아줍니다. 그 다음 gon..
N진수 게임 누가 이런겜을 하는지 입출력 예제 n : 2t : 4m : 2p : 1result : "0111" 해결 방법 가장 중요한 것은 N진수를 만드는 방법이라고 생각합니다 20이라는 숫자있고 4진수로 만들고 싶으면 4|20 4| 5 ....0 4| 1 ....1 4| 0 ....1 이 방식대로 110이 나온다중요한건 마지막에 나눈 값이 숫자의 가장 높은 자릿수가 되버린다. LIFO이기 때문에 스택방식으로 저장해서 빼낼 수 있지만값을 20을 4로 나누고 0 데이터 넣고 (0)그다음 5를 4로 나누고 1 데이터를 0 앞에다 넣고 (10)그다음 1을 4로 나누고 1 데이터를 10 앞에다 넣어버리면 된다. 이렇게 값을 다 구했으면 튜브가 말해야 하는 위치를 골라서 answer에 넣어주면 된다. 소스 코드 ..
압축 입출력 예제 msg : TOBEORNOTTOBEORTOBEORNOTanswer : [20,15,2,5,15,18,14,15,20,27,29,31,36,30,32,34] 해결 방법 처음에 문자를 1개씩 합쳐봅니다. 저는 temp 라는 곳에 T를 넣었을 때 사전에 있으면 TO도 찾아봅니다. TO가 없을 때 이 문자를 index(사전)에 집어넣는 방법을 이용해서 풀면 해결이 됩니다. C++로 저는 find함수를 이용해서 데이터를 찾아냈습니다. 그리고 해당 번호는 find를 찾았을때 iterator로 반환되는데 iterator-벡터 시작의 값을 이용해서 색인 번호를 찾아낼 수 있습니다. 소스코드 #include #include #include using namespace std; vector solutio..