일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- c++
- BaekJoon
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- Smilegate
- 알고리즘
- 삼성 #코테 #2020상반기 #c++
- 백준
- Algorithm
- Union-find
- 코테
- 유니온파인드
- 식단
- 중반부
- 소감
- 스마일게이트
- 서버개발캠프
- BFS
- 카카오인턴
- 코딩테스트
- 카카오
- LIS #Algorithm #요소추적
- 보석쇼핑
- 투포인터
- 1편
- Today
- Total
목록Algorithm (178)
짱아의 개발 기록장
그리디+투포인터를 사용한 문제였다. 문제를 처음봤을 때 정확히 풀이가 떠오르지는 않았지만, 어차피 2명이 최대이고 limit이 주어져서 i, j 인덱스로 해결할 수 있을 것이라 생각했다. [메인 로직] 중요한 점은, i, j모두 전역변수로 선언해주어야 한다는 것!!!! people배열을 정렬하고 j는 맨뒤부터, i는 맨 앞부터 탐색하도록 했다. 그리고 i, j의 합이 limit이하면 두명이서 보트를 탈 수 있기 때문에 i++, answer++했고 limit을 초과하면 그냥 answer++하고 넘어간다. 이후, i==j인 경우는 answer++을 한 번 더 해준다. 첫 번째 풀이 for문을 사용해서 푸는 방법 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ..
그렇게 난이도가 높지는 않은 문자열 처리 문제였다. 2개씩 단위로 나누어서 다중집합(중복이 가능한)을 만들고 다중 집합들의 합집합과 교집합을 구하는 문제! 합집합, 교집합을 구하는 방법에는 여러가지가 있겠지만, c++ STL을 사용해서 풀었다. set_union => 합집합 set_intersection => 교집합 그리고! set_union, set_intersection을 사용할 때 중요한 점!!!!! 반드시 각각의 집합이 정렬되어있는 상태여야한다. 그래서 이전에 s1, s2를 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 ..
배열 arr가 주어졌을 때, 배열에서 가장 작은 숫자를 제거한 배열을 리턴하는 문제였다. 예를 들어, [4, -1, 2, 3]이 주어지면 -1을 제외하고 [4, 2, 3] 을 반환하면 된다. 단, [10] 과 같이 원소가 하나만 있는 배열이 주어져서 제거한 후 원소가 아무것도 없으면, 배열에 -1을 넣어서 반환해준다. 12345678910111213141516171819202122232425262728293031#include #include #include #include using namespace std; vector solution(vector arr) { vector answer; int num = INT_MAX; int idx = 0; for(int i=0; i
40분 시간을 주고 2문제를 푸는 실력 체크 level 1을 풀었다. 생각보다 쉬워서 20분? 정도만에 2문제 모두 풀 수 있었다. 첫 번째 문제는 문자열을 숫자로 변환해주는 문제였다. 예를 들어, -1234 => -1234로, +1234 => 1234로, 1234 => 1234로 변환해주면 된다. 맨 앞에 부호(-, +)가 있을 수도 없을 수도 있다는 가정하에 풀어야 한다. 1234567891011121314151617181920212223242526272829303132333435#include #include using namespace std; int solution(string s) { int answer = 0; bool isMinus = false; bool isPlus = false; if..
문자열에 순열을 가미한 문제였다. 가장 놓치지 쉬운 부분이 MAX의 초기값 설정에 관한 부분이었는데... 최대값도 음수가 될 수 있다는 점!!!! 그래서 최대값도 0이 아니라 -INT_MAX값으로 초기화 해주어야 한다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#include #include #include using namespace std; int n, op;char oper[4] = {'+', '-', '*', '/'};int num[101] = {0, };vector v;int MIN = 987654321, MAX = -987654321; int cal(){ ..
[메인 로직] String에 Backtracking을 가미한 문제였다! 0~i까지 탐색해보면서 팰린드롬이 되면 다음 idx값을 넣어주고~ 계속 재귀로 들어가다가 idx==s.size()가 된다면 리턴해주면 된다. 코드를 참고하면 더 이해가 빠를 듯 하다. 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 class Solution { public: vector ans; bool check(int Start, int End, string s){ int half = (End+1-Start)/2; // 양쪽을 비교할 횟수 for(int i=0; i
String문제였는데 여기에 DP를 가미한... 근데 글쓴이는 DP로는 도저히 풀이방법이 생각나지 않고 다른 정답코드를 봐도 이해가 잘 되지 않아..서 BFS코드를 참고해서 풀었다. [메인 로직] String+BFS로 풀었다. 맨처음 큐에 0을 넣어주고 for문으로 맨 뒤 idx부터 현재 idx까지 역순으로 탐색하며 팰린드롬이 되는 지 확인한다. 만약 팰린드롬이 완성된다면 큐에 해당 idx를 넣어주었다. 이 과정을 반복! 한 레벨이 반복될 수록 cuts가 1씩 늘어나는 것! 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 class Solutio..
이 문제는 실제 N* 게임회사에서 나왔던 코딩테스트 문제와 거의 99%일치하는 문제였는데.... 아쉽게도 시험에서는 풀지 못해서 백준에서 유사한 문제를 기여코 찾아내서 풀었다...ㅎㅎ 처음에 봤을 때는, 중학교때 풀었던 경우의 수? 같은 문제여서 대충 DP로 푸는 문제구나 싶었긴 했는데.... 결국은 아래 블로그의 풀이를 참고해서 풀었다..;; (DP는 왜 이렇게 어려울까?ㅎㅎ) blog.naver.com/occidere/220784778900 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 #include #include using namespace std; int n, k; int dp[10001] = {0, }; vec..