일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- c#
- 문자열&연산자
- 메모리 배리어
- 제로베이스
- MemoryBarrier
- C++
- 구현
- Server
- 완전탐색
- 코딩테스트 스터디
- map
- leetcode
- 백트래킹
- 백준
- 프론트엔드 스쿨
- 자바스크립트
- 프로그래머스
- 알고리즘
- socket
- dfs
- 코딩테스트
- React
- N과 M(2)
- BFS
- 서버
- Algorithm
- JavaScript
- 제로베이스 프론트엔드 스쿨
- 구조체
- 멀티스레드
- Today
- Total
목록전체 글 (72)
Written
두개의 컨테이너 벨트를 사용해서 주어진 order에 맞게 택배를 담을 수 있게 하는 것이 문제 해결의 요지였습니다. 서브 컨테이너가 마치 자료구조의 Stack과도 같은 구조를 하고 있기 때문에 두 개의 vector를 통해 어렵지 않게 해결이 가능한 문제였습니다. 하나 주의해야할 부분은 서브 컨테이너에 옮기다가 order에 맞게 택배 상자를 실은 다음에, 다음 차례로 실어야 하는 박스 번호가 서브 컨테이너와 메인 컨테이너에서 곧 장 꺼낼 수 없다고 하더라도 더 실을 수 있는 경우가 존재하는 것 입니다. 메인컨테이너가 비어있는게 아니라면 서브컨테이너에 다시 옮기면서 이번에 실어야 하는 박스번호를 찾아서 옮길 수 있는 경우가 존재합니다. 처음 풀이에는 저도 문제에 나와있는 테스트케이스만 보고 그대로 구현하다보..
문제 해결을 위해선 결국 앞에서 부터 topping배열의 끝까지 모든 경우를 다 확인해 봐야 한다고 생각했습니다. 그런데 한번 배열을 자를때마다, 왼쪽 오른쪽 둘다 순회하면서 중복을 제외한 토핑의 가지수를 다 세는 경우에는 시간초과가 날 수 있는 Input 범위입니다( 최대 1,000,000 ). 결국 일일이 다 순회하지 말고 해결하라는 의도가 담겨 있는 문제이지요. 그래서 모든 순회를 하지 않는 선에서 갯수를 셀 수 있는 방법은 사실 map을 사용하는 경우 말고는 떠오르는 것이 없기 때문에 map을 잘 이용할 생각만 떠올린다면 LV2 치고는 쉬운 문제였다고 생각합니다. 아이디어를 떠올리고 나서 코드를 짜는건 5분도 안걸렸습니다. 생각보다 map을 이용해서 해결하는 문제가 많기 때문에 map의 활용은 정..
C++의 컨테이너 중 하나인 map을 알면 쉽게 해결할 수 있는 문제였습니다 ! 체감상 다른 Lv2 문제들 보다는 쉬운 편이었습니다. 따로 함정이 존재하지도 않고 생각한대로 구현해서 바로 맞은 몇 안되는 문제였습니다. map은 key값과 value값을 함께 가질 수 있기 때문에 크기를 key값으로 그리고 그 갯수를 value로 insert 해줍니다. 그러면 map에는 귤의 크기와 그 크기를 가진 갯수가 저장되어있고, 정렬을 위해 vector 컨테이너로 옮겨서 크기별로 내림차순으로 정렬합니다. 그러면 갯수들이 많은 귤의 크기정보순으로 정렬이 되고, 담고자 하는 k에서 맨 앞에서부터 그 크기대로 값을 빼주면서 갯수를 카운팅합니다. 그렇게 0이되거나 0보다 작을때까지 계속 빼주면 서로 다른 종류의 최솟값을 쉽..
처음엔 구조체로 입력에 들어있는 가장 큰 값들을 k의 갯수만큼 인덱스와 함께 넣고, 값들을 0으로 바꾸어서 1라운드부터 진행하는 식으로 했는데 이렇게 하면 큰 오류가 있습니다. k=4라고 가정할때, 3 3 3 3 5 5 5 5 가 입력이면 n이 12가 넘으면 위의 풀이가 정답이 될수 있지만 그게 아니라면 k를 다 뒤에서 써버리는 로직이기 때문에 올바른 답을 도출 할 수가 없습니다. 결국 이 풀이는 틀린 풀이었고 일단 n을 사용해가면서 0보다 작아질때, 지나왔던 곳에서 가장 큰 숫자가 있었던 라운드를 지우는 방법의 풀이가 정답을 받을 수 있었습니다. 이 풀이에서 놓칠 수 있는 부분은 k를 다 사용하기 전에 인덱스가 enemy의 크기를 넘어서는 경우가 있을 수 있어서 마지막에 return enemy.size..
문제의 조건대로 정렬하고 주어진 row_begin 행부터 row_end 행까지 행에 있는 모든 원소들을 모듈러 연산을 하여 합하고, 한 행이 끝날때마다 비트 XOR연산을 통해 답을 도출하는 문제였습니다. 정렬을 위한 함수 구현과 비트 연산(^)의 개념만 숙지하시면 문제는 크게 까다롭지 않은 것 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #include #include #include using namespace std; struct N..
일반적인 BFS풀이로 구하기엔 입력의 숫자가 1억으로 너무 큽니다. 문제의 의도가 BFS가 아닌게 느껴지고, 최소의 횟수를 찾는 경우기 때문에 그리디 알고리즘 풀이의 방식일거라 생각했습니다. 실제 풀이 역시 일의자리 숫자부터 5를 기준으로 큰지 작은지 판별합니다. 만약 5인 경우에는 올림을 했을때, 그 다음 자리의 숫자에 영향을 미치기 때문에 그 다음자리의 숫자를 0~4 , 5~9에 따라 버리거나 올리거나를 결정해야 합니다. 그 다음 숫자가 5라면 올려서 6을 만드는게 최소인 경우이고, 4일때는 굳이 올려서 5를 만들필요 없이 버리면 됩니다. 마지막으로 코드 안에서 가장 큰 자리의 숫자(맨 앞자리 숫자)의 경우에는 연산이 다른 자리의 숫자들과 조금 다르기 때문에 그 부분만은 따로 case분류하여 코드를 ..
처음엔 DFS로 완전탐색 방식으로 구현해봤는데, 테스트케이스 절반에서 시간초과가 나서 BFS로 바꾸었더니 시간초과 없이 전부 맞출 수 있었습니다. 문제를 풀 때, BFS를 사용할 수 있으면 BFS가 높은 점수를 받기에는 더 좋은 것 같습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #include #include #include #include #include using namespace std; // DFS로 완전탐색때는 시간초과 났었기때문에 B..
지속적으로 sort를 사용해서 현재 저장되어 있는 객실들을, 마감 시간 기준으로 정렬해줘야 필요한 방의 갯수를 정확히 셀수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 #include #include #include #include using namespace std; //정렬부터 struct Task { string sT; string eT; Task..