분류 전체보기 261

swexpertacademy - 1768. 숫자야구게임

N은 4자리로 고정되어 있다. query 함수를 호출해 보면 스트라이크와 볼의 갯수를 알 수 있다. 예시인 플레이어1은 '1234' 플레이어2는 '4139'면 첫번째 경우 1 스트라이크, 2 볼일 수 있다. 그러면 음 뭘 해야 될까. 1. 스트라이크를 찾는다. -> '1234'중 한 자리씩 아예 새로운 숫자로 바꿔 본다. (2,5,6,7,8,) 중에 가능하다. 4139 -> 2139 : 1스트라이크 2볼 여전하다. 4139 -> 4239 : 2스트라이크 0볼, 스트라이크가 하나 늘었다. 확실한거는 꼭 저장하자. 어떻게?? (1,5,6,7,8) //즉 스트라이크 + 볼 4231 : 1 스트라이크 3볼 // 스트라이크와 볼의 갯수가 4개니까 여기서 부터는 숫자..

swexpertacademy - 9088. 다이아몬드,8998. 세운이는 내일 할거야, 8993. 하지 추측

b형 코테 보려고 푼다. 음 막상 풀어보니까 쉽지 않다. iostream만 쓴다는건 더 정확하게 설계해야 한다. 난 중간에 하다가 뒤집어서 시간이 오래걸린다.!!! 9088. 다이아몬드 음 배열이 주어지면 서로 차이가 K이하인 것들을 모았을때 최대가 되도록 하는 갯수를 구해야 한다. 다이아몬드 갯수는 1000개 이하라 n^2도 가능하다. 이중 for문으로 각 다이아에 대해 다른 다이아들이 K이하인지 확인하면 될듯? -> 안된다. 이런식으로 넣으면 확인하는 대상 두개 말고 넣어진 애들끼리 K 이상일 수 도 있다. 아니면 오름 차순으로 정렬하고 앞에서 부터 차례로 K 이하인 놈들끼리만 넣어보는거다. 근데 이때 틀리고 알게된건데 가장 작은 놈이랑 새로 넣으려는 놈의 K만 비교하면 된다. 즉 그냥 우선순위 qu..

프로그래머스 - 힙 : 더 맵게,라면 공장, 디스크 컨트롤러

이 파트에 되게 취약하다..... 전에 전공 복습에서 힙을 공부 했었다. 이번에는 c++로 객체 지향으로 구현해 보자. 문제는 최소 힙을 구현하면 된다. 그리고 최소힙 팝, 푸쉬를 구현하면 된다. 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) scoville의 길이는 1 이상 1,000,000 이하입니다. K는 0 이상 1,000,000,000 이하입니다. scoville의 원소는 각각 0 이상 1,000,000 이하입니다. 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다. 길이가 100만이다. 음 힙을 구현하느라 애를 많이 먹었다. 버블 다운 방식, 바텀 업 방식. #include #inc..

프로그래머스 - 카카오 2018 블라인드 테스트 (추석 트래픽)

문제는 시작, 끝 시간으로 구성된 여러개의 시간 구간들이 주어진다. 그리고 임의의 1초 구간 동안 동시에 시간 구간이 몇개나 최대로 같이 있는지 구해보라는 것이다. 시간 구간은 2000개가 주어지니까 n^2도 문제 없다. 내가 생각한 구현은 시작 , 끝 구간 시간들 쭉 저장하고, 그것을 순회하면서 이 사이에 있는 타임라인들의 수를 구하고 그 최대를 구한다. 시간의 범위는 9월15일 00:00:00.000 ~ 23:59:59.999 인듯? 그냥 int로 변환해서 저장하면 될듯 근데 문제가 시간을 못 더하겠다.....음 .... 1.181 -> 이게 string인데 어떻게 바꾸지. 해결하려 한 부분들 1. 소수 문자열을 -> 실제 소수로 변환 -> 근데 float ,double은 밑에 부분이 잘려서 그냥 i..

백준 - 1725번 히스토그램,6549 히스토그램에서 가장 큰 직사각형

이 문제를 스택으로 해결했었다. 그런데 음 스택으로도 다시 풀어보고, 분할 정복으로도 풀 수 있던데 두가지로 풀어보겠다. 이전에 스택했으니 일단 분할정복으로 하자. 보통 분할 정복은 절반씩 분할하는거 같다. 계속 분할해서 한개가 되고 두개로 합칠때 음? 어떻게 생각해야되는 걸까.... 음 분할해서 해당 영역의 가장 큰 넓이를 찾으면 된다고 생각한다. 그리고 이제 두개를 합치면 되는거 같은데, 그렇다면 합칠때 양쪽 중에 더 작은 높이 * 양쪽 갯수 랑 두개 영역을 비교해서 가장 큰 넓이를 선택하게 한다. 이때 합병하면서 저장해야 되는 값은 가장 작은 높이, 합친 넓이이다. 가장 작은 높이랑 갯수를 알면 왼쪽 오른쪽을 합칠때 합쳐질 넓이를 알 수 있다. 재귀함수를 사용할텐데 매개 변수로 시작,끝 인덱스를 넘..

프로그래머스 - 카카오 2020 블라인드 테스트 (블록 이동하기, 문자열 압축)

전에 테스트때 풀었던 문제이다. 그런데 그때 구현이 틀렸다. 근데 틀린 원인이 내 생각에는 설계를 잘못한듯. 완전 탐색이긴 한데 , bfs도 어떻게 수행할지 조건들에 대한 내용을 결정하고 , 그것을 깔금하게 구현해야 할듯. 나는 이동할 수 있는 경우가 몇가지인지 제대로 파악 안하고 시작했다. 그리고 일단 로봇의 상태를 어떻게 표현할지 부터 정했어야 했다. 로봇의 상태를 어떻게 표현할지 정확히 생각하고, 배열의 범위 확인도 함수로 구현해서 확인 후 그 함수 내부에서 큐에 넣도록 하니까 깔금하게 금방 구현했는데, 예제만 맞고 테케는 한개만 맞는다..... 왜그러지 ㅠ #include #include #include using namespace std; enum { ver = 1, hori = 2 }; str..

프로그래머스 - 스택/큐 : 프린터, 쇠막대기, 주식 가격

프린터 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 1번은 수행이 매우 단순하다. 2번 부분에서 뒤에 중요도가 높은 문서가 한 개라도 존재하는지가 문제 해결의 부분인거 같다. 내 생각에는 맨 처음에 대기 목록에서 맨 앞에 것을 제외하고 가장 높은 우선 순위를 max_priority에 저장한다. max_priority > J 이면 J를 대기 목록 맨 뒤에 넣는다. max_priority < J이면 출력하고 order를 1 증가한다 . J가 location이면 order를 출력한다. 근데 max_priority는 뒤에 가장 ..

프로그래머스 - 스택 : 탑, 다리를 지나는 트럭, 기능개발

스택은 진짜 그냥 맨날 나오는 문제 유형이다. 면접에서도 중요한 개념으로서 이용하라고 문제 냈는데 틀렸다.... 탑 사실전에 백준에서 풀어본 문제다. 그럼에도 풀이가 기억나지는 않음 스택을 쓴다는 것 정도 ㅋㅋ. 코딩테스트에서도 실제로 만났던 문제인데 그 당시에는 풀 줄 몰랐다. [6,9,5,7,4] [0,0,2,2,4] 예제를 분석해보면 6은 맨 왼쪽이라 0 , 9는 왼쪽에 자기보다 큰게 없어서 0, 5는 왼쪽에 9가 있으니 2, 7도 왼쪽에 5는 스킵되고 9가 있으니 2, 4는 7이 바로 왼쪽에 있으니 4이다. 그럼 목표는 모든 위치에서 왼쪽에 가장 먼저 자기보다 큰 기둥을 찾는 것이다. 스택에 넣다가 해당 위치에서의 답을 구하려면 스택에서 빼면서 먼저 만나는 자기 보다 큰 값을 확인하면 될거 같은데..

프로그래머스 - 카카오 2020 블라인드 테스트 (자물쇠와 열쇠, 가사 검색)

자물쇠와 열쇠 실제로 시험을 봤었는데 , 그때 어려워 보여서 안풀고 넘어갔다. 문제의 목적은 키가 락에 들어 맞는지 확인하는 것이다. 방법은 키를 회전, 이동시켜서 확인하면 된다. 문제에 주어짐..... 근데 문제는 회전 구현이 어려워 보인다. 회전을 어떻게 하지??-> 음 row, col의 위치를 교환하면 되는거 같다!!... -> 근데 이건 0,0이 왼쪽 위로 기준이 고정됬을때다. 그러면 회전하고 이동시킨다 치고...?이동도 어떻게 해야되지?? -> 이동 시키려면 키를 없애면 안되고 범위를 정해서 이동시켜야 한다.?무슨 말이지 ㅋㅋ -> root_r ,root_c , 배열 크기인 n을 사용해서 전체 배열을 이동시키기 보다 세 변수의 변경을 이동으로 처리하자. 홈에 맞는지 확인은 어떻게 하지?? -> ..