BFS를 활용해 시작위치로부터 일정 거리 내에 있는 값까지만 고려해 결과를 도출한다.BFS를 수행하는 과정에서 for문을 다른 풀이보다 하나 더 사용해 비효율성이 발생한 것 같다.
정렬 알고리즘이 필요할 정도로 입력된 수가 많은 문제는 아니지만 정렬알고리즘 시험을 위해 버블정렬을 사용해 보았다. 다른 문제를 통해 삽입, 선택, 퀵 정렬도 사용해 본다.또한 자바 연습을 위해 Bufferedreader로 입력받는 방법과 코드를 각각의 함수로 나누는
BFS를 이용해 몇개의 덩어리가 있는지 판단하는 문제이다.
기본적인 별찍기 문제이다. java를 사용해 문제풀이를 처음 시도했다.
BFS를 통해 각 위치로부터 목표지점까지의 거리를 구하는 문제이다. 각 위치로부터 목표까지의 거리를 각각 구하는 것보다 목표에서 각 위치까지의 최단거리를 구하는 것이 더 효율적이다.정답을 넣을 벡터를 전부 -1로 초기화 하고, 그래프 정보를 입력받을때 0의 위치를 미리
BFS를 통해 푸는 문제이다.각 덩어리에서 양과 늑대의 마릿수를 저장하고 덩어리 내에서의 BFS가 종료되면 남은 마릿수를 따로 저장해야 한다.
기본적인 BFS 문제이다.모든 번호에 대해 BFS를 수행하고 결과를 누적한다.누적값이 최소값보다 작으면 갱신한다.
2024년 2월 22일기본적인 BFS문제이다.각 BFS 시작위치에서 이동하는 영역의 누적값을 비교하여 최대값을 구한다.
백준 1003 c
백준 1008 c++
백준 1018 c++
백준 1010 c++
백준 1009 c++
백준 1074 c++
백준 1065 c
백준 1037 c++
동적배열과 버블정렬 연습을 했다.
백준 1021 c++
백준 1120 c++
백준 1152 c++
백준 1149 c++
백준 1110 c++
백준 1085 c++
백준 1075 c
1120번 문제와 비슷하다고 생각된다.그러나 채점결과에서 시간과 메모리 둘 다 다른 분들의 풀이보다 뒤떨어졌다.BufferedReader를 사용하지 않고, 이중 for문을 사용한 이유 때문이라고 생각한다.
백준 1100 java
BigInteger 클래스 사용 없이 다시 해본다.
셀프넘버를 구현하는 풀이이다.셀프넘버인 수만 골라 그 수를 인덱스로 벡터에 셀프넘버 여부를 저장한다.셀프넘버가 아닌 인덱스의 벡터만 출력한다.
연속된 수의 합이 특정값인 경우를 전부 세는 문제이다.첫번째 풀이는 삼중반복문이라서 시간초과가 생겼다.두번째 풀이는 시간초과는 없으나 다른사람들의 풀이보다 반복문을 한번 더 돌리기 때문에 시간이 더 걸렸다.세번째 풀이는 반복문을 한번만 돌려서 결과를 출력한다.
백준 1269 c++
백준 1158 c++
백준 1181 c++
백준 1193 c++
백준 1269 c++
백준 1212 java
백준 1543 java
백준 1676 java
백준 1924 java
백준 2440 java
백준 1439 c++ 오랜만에 풀어보는 그리디 알고리즘 문제
첫번째 풀이는 이중반복문으로 인해 시간초과가 발생했다.다른 분의 풀이를 참고하여 두번째 풀이를 적었다. 그리디 알고리즘 위주로 다시 공부해야겠다.
백준 1330 c++
백준 1302 c++
백준 1315 c++
백준 1427 c++
백준 2441 java
백준 2443 java
백준 2445 java
백준 2446 java
입력된 문자열에 5 또는 6이 있을 경우, 5로 저장해 최소값, 6으로 저장해 최대값을 만들었다.변수를 불필요하게 많이 선언한거 같다.
최소 개수를 구하려면 5원을 최대한 많이 거슬러주어야 한다.5의 처음 개수를 구하고, 2원으로 거스름돈을 맞출 수 없을 경우 5원을 다시 추가하고 반복한다.5원 개수가 -1이 될 때까지 결과를 만들지 못하면 2원 개수가 0이 되기에 -1을 출력한다.
백준 2455 java
백준 2523 java
백준 2747 java
백준 1436 c++
백준 1463 c++
백준 1541 c++
백준 1546 c++
백준 1620 c++
처음에는 입력된 정보를 전부 저장했지만, 계산을 수행할 때는 패키지 가격 중 가장 싼 가격, 낱개 가격 중 가장 싼 가격 2개만 있으면 된다.
백준 1629 c++
백준 1654 c++
백준 1712 c++
백준 1735 c++
백준 1764 c++
백준 2752 java
백준 2920 java
백준 2960 java
사실 어려운 문제는 아닌데 생각을 너무 많이 하다가 풀이가 오래 걸렸다.단순하게 생각한다고 풀은 것도 조건을 너무 많이 붙이고 이중반복문도 들어가서 규모가 커지면 성능이 떨어질 것으로 예상된다. 나중에 다시 풀어본다.
수행시간이 1초로 짧기 때문에 이중반복문을 안 쓰는 방향으로 풀어보았다.
동적배열 연습재귀함수 연습
백준 1789 c++
재귀함수와 반복문을 통한 피보나치 수열을 구현했다.
백준 1912 c++
백준 1914 c++
백준 3046 java
백준 5598 java
백준 8958 java
한번 영역을 정하고 점이 그 영역 안에 포함되면 결과를 반환하도록 하고 싶었는데 영역을 매번 계산하는 방식으로 구현했다. 영역계산을 한번만 하는 식으로 만들고 싶다.
백준 1920 c++
백준 1927 c++
백준 1929 c++
백준 1931 c++
백준 1932 c++
백준 10757 java
백준 10808 java
백준 10992 java
총 값을 평균값을 통해 거꾸로 찾아가는 간단한 문제이다.
백준 11721 java
백준 11719 java
백준 1934 c++
백준 1977 c++
백준 1978 c++
백준 1991 c++
백준 1992 c++
애드혹 알고리즘 : 정형화된 알고리즘이 아니라 특정 상황만을 해결하기 위한 알고리즘. 처음 풀이를 할 때 재귀함수를 통해 답을 얻으려 했지만 재귀함수 종료조건을 구할 수 없었다. 그래서 임의의 수를 계산했을 때 무조건 FA의 결과가 나오는 걸 확인했고, 모든 수에 대해
이 문제 또한 14935문제와 동일하게 답은 무조건 yes 만 나오게 된다. 왜냐하면 정수의 조건에 음수, 양수가 모두 포함되고 중복을 허용하기 때문에, an의 값들이 -1, 1이 얼마든지 나와도 되므로 어떤수든 만들 수 있다.
오랜만에 정렬문제를 연습해 보았다.직접 정렬을 하는 것도 연습해 보겠다.
백준 2108 c++
백준 2110 c
백준 2156 c++
백준 2164 c++
백준 2167 c++
조건이 쓸데없이 중복되는거 같다... 다시 해봐야 겠다.
백준 2193 c
백준 2217 c++
백준 2231 c++
백준 2292 c++
백준 2293 c
정수를 문자열로 바꾸어 펠린드롬인지 확인하는 간단한 문제다.결국 1753번 문제를 못 풀었다.
백준 2346 c++
백준 2438 c++
백준 2439 c++
백준 2444 c++
백준 2447 c++
다익스트라알고리즘을 이용해 처음 플어본 문제다.메모리초과와 시간초과를 해결하는 과정이 어려웠다.시간초과를 해결한 방법은 다익스트라 알고리즘에서 우선순위큐를 사용하는데구분하기 편하게 노드값은 전부 왼쪽, 거리값은 전부 오른쪽에 저장하게 했다. 그러나 우선순위 큐에서 조건
백준 2448 c++
백준 2480 c++
백준 2485 c++
백준 2501 c++
백준 2525 c++
처음에는 큐를 사용해 풀어보려 했지만 큐를 사용할 경우 정지조건을 충족시키는 식이 추가로 필요해서 시 벡터로 돌아왔다.
백준 2559 c++
백준 2562 c++
백준 2563 c++
백준 2566 c++
백준 2577 c
MST와 쿠르스칼 알고리즘을 처음 공부했다.BFS와 DFS를 처음 공부할때 처럼 차례로 풀어보겠다.
백준 2579 c++
백준 2581 c++
백준 2587 c++
백준 2588 c++
백준 2606 c++
최소신장트리의 가중치 총합을 구하는 문제이다.MST를 구하기 위해 쿠르스칼 알고리즘을 사용했고 프림알고리즘을 통해서도 해결해 보겠다.문제풀이중 간선개수가 (노드개수 - 1) 을 만족하면 조기종료하는 방법을 시도해봤는데, 조건을 확인하는 시간이 추가되어 오히려 시간이 늘
백준 2609 c
백준 2630 c++
백준 2644 c++
백준 2675 c++
백준 2720 c++
플로이드 와셜 알고리즘을 사용한 문제풀이다.처음에는 다익스트라 알고리즘을 사용해 보려 했지만, 다익스트라 알고리즘은 "한" 노드에 대해서 다른 노드까지의 최단경로를 출력하는 알고리즘이라 모든 점에 대해서 확인하려면 오랜 시간이 걸린다.플로이드 와셜은 "모든" 노드에서
백준 2738 c++
백준 2739 c++
백준 2740 c++
백준 2743 c++
백준 2745 c++
오랜만에 정렬문제를 풀어보았다.사용자정의 함수를 통해 정렬조건을 만드는 문제다.실행 결과 다른 사람들의 풀이보다 메모리사용량과 시간소모에서 많이 뒤떨어졌다.나는 자료를 벡터형으로 저장했고, 다른 사람들은 구조체로 저장한 차이때문이라고 생각되는데 다음 문제는 구조체로 저
백준 2748 c
백준 2750 c++
백준 2751 c++
백준 2753 c++
백준 2775 c
쉬운 정렬문제다. 최대 입력량이 굉장히 커서 시간, 메모리 소모량이 큰 듯하다.
백준 2798 c++
백준 2805 c++
백준 2839 c++
백준 2869 c++
백준 2884 c++
쉬운 정렬문제이다.벡터를 오름차순으로 정렬하고i는 1부터, j는 n부터 계산을 시작하여, j가 감소해온다.계산에 맞는 i, j를 찾았다면 다음 j는 i가 현재 i보다 커질 것이기 때문에 현재 j보다 클 수 없다.
백준 2903 c++
백준 2908 c++
백준 2941 c++
백준 3003 c++
백준 3009 c++
간단한 정렬 + 중복제거 문제이다.vector을 사용해도 되나, set 컨테이너 연습을 위해 set을 사용해봤다.부트캠프 시작이후로 어려운 문제를 도전하기가 힘들다...
백준 3052 c++
백준 4134 c++
백준 4779 c++
백준 4948 c++
백준 4949 c++
DFS를 연습 안 한지 오래되다 보니 DFS를 통한 접근을 생각을 못했다. 그리고 완전탐색을 하면 시간초과가 생길거 같아서 시도조차 못했는데 결국 정답은 완전탐색이었다...레벨 올리는것보다 다시 차근차근 올라가는걸 목표로 해보겠다.
백준 5073 c++
백준 5086 c++
백준 5585 c++
백준 5597 c++
백준 5622 c++
백준 5543 java
오랜만에 BFS를 사용한 문제를 풀었다. 처음에는 DFS와 BFS사이에서 고민을 했는데 일단은 그냥 풀어보기로 했다.DFS로 풀어보신 분을 봤는데 시간은 큰 차이 없는거 같고 메모리 사용량은 BFS가 더 좋았다. DFS로도 풀어보겠다.
백준 6603 c++
백준 7568 c
백준 7785 c++
백준 8393 c++
백준 9012 c++
switch-case와 배열을 연습해보기 위해 좀 번거롭게 풀어보았다.배(0) 4개가 모, 등(1) 4개가 모이다. 항상 헷갈린다.
간단한 BFS 문제인데 q_size를 실시간으로 구하게 잘못 코드를 적어서 고치느라 시간이 오래 걸렸다.
백준 9063 c++
백준 9086 c++
백준 9095 c
백준 9148 c++
백준 9251 c++
오랜만에 풀어본 DFS문제이다.재귀함수로 풀어봤으니 다음에는 stack을 사용해 보겠다.
백준 9461 c++
백준 9465 c
백준 9468 c++
백준 9506 c++
백준 9655 c
간단한 BFS문제이다.방향이 8방향으로 늘어난 걸 제외하면 평범한 BFS 문제이다.
백준 9663 c++
백준 10101 c++
백준 10162 c++
백준 10171 c++
백준 10172 c++
간단한 DFS문제인데 BFS나 DP로 풀어보려고 하다가 오히려 시간만 버렸다.시작점과 끝점이 평소 풀던 문제와 달라서 입력할때 반대로 입력하게 했다. 그리고 DFS에서도 visited를 적극 사용해야 겠다.
백준 10430 c++
백준 10773 c++
백준 10798 c++
백준 10799 c++
백준 10807 c++
백준 10797 java
백준 10809 c++
백준 10810 c++
백준 10811 c++
백준 10813 c++
백준 10814 c++
간단한 BFS 문제이다. 매 회차마다 graph와 visitied를 초기화 해야 한다.
백준 10815 c++
백준 10816 c++
백준 10817 c
백준 10818 c++
백준 10828 c
앞으로 java는 오래걸리고 그럴 필요가 없더라도 클래스로 풀어볼 것이다.
백준 10830 c++
백준 10844 c++
백준 10845 c
백준 10866 c++
백준 10869 c++
백준 2744 java
백준 10870 c++
백준 10871 c++
백준 10872 c++
백준 10926 c++
백준 10950 c++
DFS로 접근하여 풀긴 풀었는데 수행시간이 다른 C++정답자들의 2배가 나왔다. 어디서 문제가 생긴지 모르겠다...
백준 10951 c++
백준 10952 c++
백준 10986 c++
백준 10988 c++
백준 10989 c++
오랜만에 생각을 많이 해볼만 한 문제였다. 약간 주먹구구식으로 풀다보니 전역변수가 너무 많아지고 코드도 많이 지저분해졌다... 다음 비슷한 문제를 풀면서 정리된 코드를 쓸 수 있도록 하겠다.처음에는 DFS로 풀어보려다, BFS로 매번 방문을 초기화하면 된다고 생각해 바
백준 10994 c
백준 11005 c++
백준 11021 c++
백준 11047 c++
백준 11050 c++
최소횟수라길래 무의식적으로 DFS를 사용해 풀었고 당연하게도 시간초과가 발생했다.그래서 거꾸로 계산하기로 생각을 해보았고 K가 홀수면 -1, K가 짝수면 /2를 하려 했는데 예시 2에서 8에서 7로 -1 하지 않고 4로 나누어서 무한루프에 빠지는 앙증맞은 찐빠가 발생하
백준 11053 c++
백준 11057 c
백준 11279 c++
백준 11286 c++
백준 11382 c++
백준 4153 c++
백준 11399 c++
백준 11401 c++
백준 11403 c++
백준 11444 c++
백준 11478 c++
백준 1550 c++
백준 11650 c++
백준 11651 c++
백준 11653 c++
백준 11659 c++
백준 11660 c++
백준 2163 c++
백준 11718 c++
백준 11720 c++
백준 11722 c++
백준 11726 c
백준 11727 c
재귀는 아직도 익숙해지질 않는다...알고리즘 자체는 처음부터 맞았지만 복귀했을 경우에 방문기록을 초기화 한것이 문제였다. 좀더 고민해봐야 겠다.
백준 11728 c
백준 11729 c++
백준 11866 c++
백준 12789 c++
백준 12865 c++
백준 2822 c++
백준 13241 c++
백준 13305 c
백준 13909 c++
백준 14215 c++
백준 14425 c++
백준 17129 c++
백준 14681 c++
백준 14888 c++
백준 15439 c++
백준 15552 c++
백준 15649 c++
백준 15650 c++
백준 15651 c++
백준 15652 c++
백준 15894 c++
백준 16953 c++
백준 3187 c++ 간단한 BFS문제이다. DFS로도 풀어볼 수 있을 거 같다. 전역변수를 최대한 안 만들어 보려고 해봤다.
어려운 문제를 결국 못풀고 쉬운 문제를 풀어버렸다.
백준 17103 c++
백준 17219 c++
백준 17478 c++
백준 18108 c++
백준 18258 c++
어렵긴 한데 도형을 다루다 보니 재밌게 풀었다. 알고리즘은 맞게 풀었지만 오류가 생긴 부분이 한 턴에서 몇개의 뿌요뿌요를 터뜨리던 count는 1만 증가한다. 터뜨린 뿌요뿌요의 수만큼이 아니라.순차 탐색을 하던 중 .이 아닌 뿌요뿌요를 발견BFS를 통해 터뜨릴 수 있는
백준 18870 c++
백준 19532 c++
백준 24060 c++
백준 24262 c++
백준 24263 c++
앞으로 평일에는 쉬운 문제, 주말에는 어려운 문제를 풀어서 스케줄을 맞출 것이다.
백준 24264 c++
백준 24265 c++
백준 24266 c++
백준 24267 c++
백준 24313 c++
여러 조건을 봐야하는 정렬문제이다. 평일에는 부트캠프 복습을 위해 쉬운거만 하려고 했는데 브루트포스문제를 안풀어 버릇해서 그런지 너무 어렵다... 브루트 포스도 다시 시작해야겠다.
백준 24416 c++
백준 24479 c++
백준 24511 c++
백준 24623 c++
백준 25083 c++
시간제한이 많이 부족하기 때문에 수학적으로 접근해봤다.
백준 25314 c++
백준 25192 c++
백준 25206 c++
백준 25304 c++
백준 25305 c++
간단한 BFS문제이다. 계산의 편의성을 위해 벡터 크기를 하나씩 더 늘렸다. 범위 지정에 주의해야 한다.
백준 25501 c++
백준 26069 c++
백준 27323 c++
백준 27433 c++
백준 27866 c++
백준 28278 c++
백준 28279 c++
문제를 잘못 읽었다. 아기상어에서 다른 아기상어까지의 거리가 아니라, 아무 빈칸에서 악어까지의 거리 중 최대거리를 구하는 문제였다... DP로도 풀수 있을거 같다?
쉬운 문젠데 왜 이렇게 잡생각을 많이 했을까.다른 분 풀이를 보니까 bool 배열을 통해 존재여부만 확인하신 분도 계셨다. 그런식으로 다시 풀어봐야 겠다.
쉬운 반복문 문제이다. 메모리 제한이 있기 때문에 배열은 사용이 불가하다.
백준 5576 c++
이게 맞나? 너무 억지로 푼거 같다... 큐나 스택같은 자료구조를 사용하면 좀 괜찮을거 같기도 하다...
백준 1840 c++
십진수를 이진수로 바꾸면서 1인 자릿수의 개수를 구하면 된다.
아주 쉬운 정렬문제인데... sort 함수를 사용했더니 다른 풀이보다 더 비효율적이게 되었다.
처음 풀은 방식은 N에 가장 가까운 제곱수를 차례로 빼기 때문에 같은 크기의 제곱수의 합에 대해서는 확인을 하지 못해서 오답이 발생했다.
오랜만에 GCD를 구하는 알고리즘을 사용해서 다시 공부하게 되었다. 유클리드 호제법이라 부른다. 첫시도에서는 틀렸는데 그 이유는 1000000과 1000000의 최대 공약수는 1000000이기 때문에 모든 최대공약수의 합은 int를 넘어설 수 있다. 그래서 long l
전역변수를 최대한 덜 사용해 보았다. 문제를 제대로 안 읽어서 틀린 시도가 있었고, 방문표시를 덜 해서 틀린 시도가 존재했다. BFS함수의 결과를 vector로 반환해보려 시도했는데 그럴 경우 복사로 인해 메모리가 2배가 되기 때문에 vector를 참조하는 식으로 바꾸
백준 5800 c++
이전에 풀었던 9613번 최대공약수와 연결되는 문제이다. 최소공배수는 두 수의 곱 / 최대공약수로 구할 수 있다.
오늘 왜 이렇게 머리가 안 돌아가지
백준 25707 c++ 정렬을 통해 풀어보기 위해 예시를 적어보던 중 정답은 (최대값 - 최소값) * 2 라는걸 찾았다. 왜일까?
오랜만에 map컨테이너를 사용해본 문제이다. map 사용에 익숙치 않아서 vector를 사용해보려 했지만 시간초과가 발생했다.
오랜만에 덱과 스택을 사용해봤다.덱은 리스트의 앞, 뒤에서 접근이 가능하고, 스택은 리스트의 뒤에서만 접근이 가능하다.처음 카드 묶음을 구하기 위해서는 덱을 사용했고, 카드스킬을 저장하기 위해서 스택을 사용했다.처음 문제에 접근할 때 정렬된 카드 묶음을 위한 덱을 만들
map과 다중기준 정렬을 연습할 수 있는 문제다.처음 입력받을 때는 map에 저장하여 빈도수를 저장하고, 입력결과를 정렬이 가능한 vector형태로 재 저장한다. 이후 복합적인 기준에 따라 vector에 저장된 자료들을 정렬하여 범위출력했다.
처음에는 vector를 사용해 A와 B 집합을 저장하고 전체비교를 통해 A의 B 차집합을 구하려고 했지만 시간초과가 발생할거 같았다. 이전에 배운 set이란 컨테이너가 생각나서 다시 복습해봤다.set은 자료가 정렬된 형태로 저장되며, 중복을 허용하지 않고, 이진트리구조
쉬운 난이도의 큐를 사용하는 문제인데... 어디서부턴가 꼬여서 나도 못알아 볼 정도로 코드가 더럽고 복잡해졌다.... 예상과는 달리 실행시간은 오히려 짧은 편이지만 코드 가독성도 떨어지고 원래 챙기려했던 모듈성도 못챙겼다. 다른 문제로 다시 연습해 보겠다.
sort()함수를 사용하지 않는 사용자 지정 정렬방법이다. 삽입정렬과 비슷한거 같다...지정된 범위를 한칸씩 뒤로 미룬 뒤의 벡터에서 지점된 범위 바로 앞에 가장 최신에 들어온 값을 넣어야 했는데, 실수로 벡터의 가장 앞에 넣어서 여러번 틀렸다.시험 준비 때문에 실수가
쉬운 정렬 + 비교문제이다. 내 코드에서는 매 회차마다 정렬을 수행하는데 자료량이 커지면 무리가 올거 같다.
백준 10709 c++
쉬운 구현문제이다. 값이 나올때마다 조건에 따라 값을 증가 시키고 마지막에 모든 요소들 중 가장 큰 값을 반환한다.
시간이 없어서 쉬운 문제를 풀었다. 대신 평소에 잘 안쓰는 조건연산자를 사용해 보았다.
8진수, 16진수를 10진수로 바꾸는 간단한 문제이다.
간단한 map을 사용한 문제다. 처음 시도에서는 틀렸는데 key값을 string으로 해서 그렇다.map은 key값을 기준으로 오름차순으로 정렬되는데, string의 경우 "123"이 "5"보다 앞에 있다고 판단한다. 그렇기에 string의 키값을 모두 long long
메모리제한이 많이 빡빡한 문제이다. 메모리 제한을 지키기 위해 저장개수를 N개로 제한했다.우선순위 큐를 사용했는데 우선순위 큐는 내림차순으로 정렬된다. 그래서 pop()을 하게 되면 가장 큰 값이 pop()이 된다.priority_queue<int, vector&
쉬운 정렬문제이다. 그런데 문제에서 중복경우를 제외하라는 말이 없었지만 임의로 제외해 보았다가 틀렸다. 그리고 다른 분의 풀이보다 시간과 메모리 사용량 둘다 뒤떨어졌다. 참고해 보겠다.
백준 2776 c++ 처음에는 모든 값을 저장하려고 반복문을 돌려서 시간초과가 발생했다. 시간을 줄이기 위해 두번째 자료는 저장하지 않고 입력때마다 바로 결과를 출력했다.
백준 2522 java
map 컨테이너의 새로운 사용방법과 find함수의 활용, 반복자 활용을 연습해본 좋은 문제였다. 여러번 복습해 보겠다.아쉬운 점은 변수명을 너무 비슷하게 주는 바람에 나중에는 스스로 헷갈렸다. 변수규칙을 개인적으로 더 확실하게 잡겠다.
스택을 사용한 쉬운 문제이다. '('의 경우 언제나 스택에 push하고, ')'의 경우 스택에 상쇄될 수 있는 '('이 있으면 상쇄, 없으면 push하는 방식으로 해결 할 수 있다.
다른 풀이들에 비해 시간은 짧지만 메모리가 수배는 더 먹었다. 컨테이너와 변수를 많이 써서 그런거 같다. 근데 이 난이도에 있을 문제가 아닌거 같다.입력과 풀이를 독립시켜서 풀어보려고 했는데 그건 다른 문제로 다시 도전해 보겠다. 메모리 사용량도 줄여보겠다.
쓸데없는 생각을 너무 많이 했다. 단순 SJF 알고리즘인데 매 회차마다 순서를 정렬하려는 생각을 했다. 단순하게 시도해보겠다.
오랜만에 풀어본 DFS 알고리즘 문제이다. 지금까지는 재귀로 풀었지만 BFS에서 queue컨테이너를 사용하듯이 stack컨테이너를 사용해 풀어보았다.또한 정보 저장을 map 연습을 위해 map을 사용해 보았다.
c++의 algorithm 헤더 안에 있는 next_permutation이라는 함수를 사용했다.
백준 4659 c++
이전에 풀었던 next_permutation 함수를 사용해 모든 순열을 만드는 함수를 사용해 보았다.
백준 5533 c++
LCM,GCD를 사용하는 문제이다.자주 사용해 봤는데 아직도 자주 까먹는다.따로 정리해보겠다.
백준 10973 c++
머리가 안 돌아가서 문제다.
백준 1138 c++
map은 키값에 대해 자동 정렬하여 저장되기 때문에 map으로 정답 자료구조를 만들어 보았다.
백준 1850 c++
백준 11557 c++
내림차순정렬 + 쉬운 DP
온전한 괄호를 구하는 문제와 동일하다. 온전한 괄호를 구하듯이 온전한 단어 아치를 구하는 문제이다.
next_permutation()을 통해 조합을 만드는 방법에 대해서 또 다시 공부해야겠다.
간단한 문제인데, 봉우리들이 순환한다고 착각해서 구현하느라 시간을 낭비했다. 봉우리는 순환하지 않는 구조이다.
백준 6126 c++
백준 1032 c++
조합할 필요 없이 단순 나누기 결과만 구하면 된다.
deque를 사용해 결과를 구하는 문제이다. 반복순회를 필요이상으로 많이 한거 같다...
현대 오토에버 코딩테스트에서 어려웠던 냅색 문제에 대해서 공부를 시작하겠다.DP문제도 같이 공부할 수 있을 거 같다.참고 : https://velog.io/@pjh612/%EB%B0%B1%EC%A4%80-16493%EB%B2%88-%EC%B5%9C%EB%8C%
dp 연습 시작해봤다. dp 문제중에서는 제일 쉬운듯 하다.입력할 때의 N,M과 결과계산의 N,M을 따로 구했더니 범위지정에서 애로사항이 있었다.
백준 9610 c++
파스칼의 삼각형을 구현하는 문제이다.다른 사람들의 풀이를 보니 파스칼의 삼각형을 구현하지 않고 수학적 식을 찾아내어 풀이한 경우도 보였다. 참고해 다른 답을 제출해 보겠다.
백준 2535 c++
기본적인 정렬 문제이다. 처음 입력받을 때 전체 요소개수가 아닌 팀 개수를 입력하는걸 주의하고, 계산할때도 정렬된 결과의 처음과 끝을 계산하는 방식으로 순회를 반으로 줄인다. 처음과 끝 계산이니 벡터로 반복횟수를 반으로 제한하는 방법대신 정렬결과를 deque로 저장해서
다른 사람 해설보다 메모리를 1.5배 정도 더 사용한다.어디가 문제일까
문제에 나온 테스트케이스를 참고하여 알고리즘을 구현했더니 오히려 틀렸다. 가장 간단하게 내림차순으로 정렬해서 세개씩 그룹짓는게 정답이다.
다시 DFS를 시작해야겠다.
백준 27160 c++
오랜만에 풀어본 BFS문제이다.양방향 그래프문제이고, 결과 벡터를 정렬한 후, 뒤에서부터 순회하여 계산 시간을 줄이려 했지만 그 전에 반복과정이 많아서 그런지 효과는 별로 없었다.
공백포함 문자열 입력과 그 입력된 문자열을 벡터에 구분해서 넣는 법에 대해 공부했다.
N이 1일경우 2가 출력되는 예외가 있었다. 가장 최악의 경우, 가장 단순한 경우에 대해 예외를 확인해보자.
최악의 경우의 수에서 결과가 int형 크기를 넘을 수 있으므로 결과는 long long 타입으로 지정한다.
백준 1251 c++ 반복문을 사용하여 어떤 문자열을 3개로 자르는 방법을 공부했다. 또한, 반복문을 사용하지 않고 어떤 문자열 길이만큼 새로운 문자열을 만드는 방법을 공부했다. > string str = "helloworld"; > string A(str.leng
공백 포함 문자열을 입력받아서 ' '을 기준으로 나눠서 검사를 진행하는 문제이다. 검사를 진행하는 과정에서 가장 마지막에는 ' '가 없으므로 마지막 단어는 검사를 안하게 되므로 따로 검사를 해야 한다.
간단한 십진법을 이진법으로 변환하는 문제이다. 그러나 거꾸로 변환할 필요가 없어 더 간단하다.
백준 14490 c++
백준 7567 c++
너무 함수를 많이 나눠서 그런지 다른 사람들 풀이보다 메모리와 시간소모가 컸다.시간 소모는 크게 차이나지는 않은데 메모리 소모가 어디서 크게 발생하는지 확인해 봐야 겠다.어쨌건 방향과 현 위치를 좌표로 구분해 추적하여 수행하도록 했다.또한 진행 방향을 바꾸는 과정을 식
생각해보니 cout에서 소수점 조절에 대해서 크게 생각해보지 않았다. 이번 기회에 연습해봤다.
첫 시도에서 문제를 대충 읽고 queue를 사용했다가 틀렸다.이때, 크기순으로 정렬된 priority_queue를 사용하여 풀이했다.
백준 2605 c++
백준 16212 c++
BFS를 활용한 간단한 문제이다. 하나의 테스트 케이스에 대해 방문여부를 초기화하며 순회해야 한다. 크게 어려운 문제는 아니었지만 오랜만에 BFS를 사용해서 각 함수의 수행 여부를 확인할 수 있도록 출력문을 추가했다.
백준 1297 c++
백준 9076 c++
반복문을 로 했더니, buffer가 새로운 순회문이 돌때마다 size를 갱신해서 문제가 생겼다. 반복문 횟수는 변수를 따로 지정하겠다.또한 입력과정에서 큐 크기가 N을 초과했는지 확인하는 과정을 먼저 가졌더니 0의 경우 pop()하는 과정을 생략하는 문제가 있었다.
최초 0, 1 인덱스의 문자열의 순서를 기억하고, 그 다음 문자열들의 관계가 기존 순서와 다르면 NEITHER로 종료, 같다면 해당 순서로 계속 진행으로 구현했다.
백준 6996 c++
쉬운 문제인데 너무 오래 걸렸다.큐를 사용하지 않고, 부분문자열 함수를 사용했다. map을 사용해 사이클 단어가 아닌 해로운 단어일 경우에만 map에 추가했다.
백준 1544 c++ 쉬운 문제인데 너무 오래 걸렸다. 큐를 사용하지 않고, 부분문자열 함수를 사용했다. map을 사용해 사이클 단어가 아닌 해로운 단어일 경우에만 map에 추가했다. 아주 미세하게 시간과 메모리 사용에서 다른 c++ 풀이보다 많이 나왔다.
다른 풀이에 비해 시간은 동일하지만 메모리 사용량이 너무 많았다.모든 입력을 한 번에 다 받아서 정답을 확인하려 한 것과, 키값들과 암호문을 또 새로운 벡터로 받아서 그런거 같다....쉬운 알고리즘이었는데 너무 복잡하게 생각한거 같다.
탐색과정에서 브루트 포스가 생각보다 많이 걸려서 첫 시도에서 실패했다.탐색 알고리즘을 이진탐색으로 수정하여 해결했고, 메모리 사용량이 다른 풀이보다 더 많이 나왔다.
오랜만에 java를 사용해 문제를 풀어보았다. 앞으로 java 공부를 위해 월수금은 자바로, 화목은 c++로 풀어보겠다.java를 공부하며 우선은 배열이 아닌 Vector클래스에 익숙해지겠다.
입력 방법이 특이해서 테스트 구현하기가 어려웠다.
오랜만에 Date 클래스를 사용해 보았다. 그런데 SimpleDateFormat을 까먹어서 다른 풀이를 참고했다. 복습에 도움을 받았다.
알고리즘 자체는 쉬운 문제이지만 제한 메모리가 2mb이다. 기존에 적은 변수들을 최대한 다이어트 하였다. 그리고 자꾸 클래스 명을 Main으로 바꾸는 걸 까먹어서 오답이 발생한다. 다른 방법을 생각해 봐야겠다.
백준 9625 java
DP문제를 다시 쉬운거부터 시작해보겠다.
백준 14494 java
백준 16194 java
쉬운 문제이기 때문에 Vector사용에 익숙해지는 연습을 했다. 너무 바쁘다...
벡터 연습하게 벡터에 저장하고 다시 읽어서 정답을 찾는 방식으로 할 걸 그랬다...
공백포함한 문자열을 받고, 공백 기준으로 파싱하는 함수를 공부할 수 있었다. 공백기준 문자열 파싱에 대해 따로 정리하겠다.참고 : https://seoyeonkk.tistory.com/entry/C-%EA%B3%B5%EB%B0%B1-%EA%B8%B0%EC%A4
백준 17427 java
처음에 long, long long 으로 타입을 지정하고 틀렸다. 수가 굉장히 크기 때문에 string타입으로 지정하고, string타입으로 사칙 연산을 수행해야 한다.reverse 함수와 to_string 함수 활용에 대해 연습할 수 있었다.
백준 1547 java
백준 4101 java
백준 2845 java
백준 11170 java
백준 5554 java
백준 1448 c++
백준 2476 java
enum 타입을 사용해 보고 싶어서 써봤다.
여러 메서드로 분리하는 방법 + Vector + Colletions.sort()를 사용해 봤다. 자료구조를 만드는 과정에서 class를 사용해보려 했는데 더 연습해 보겠다.
백준 3135 c++
C++, java, python, 그리고 JS를 모두 번갈아 가며 연습할 예정이다.
백준 7510 java
재귀함수 연습을 다시 시작해 보겟다...
백준 2312 java
위상정렬에 대해 오래 전에 한번 풀어 봤던거 같은데 생각을 못해서 BFS로 시도해보려다 실패했다. 큐를 사용해 위상정렬을 구현하고, BFS보다 조건문이 적게 사용할 수 있는 거 같다. 다시 정리해보겠다.참고 : https://www.youtube.com/wat
java에서 sort와 compare를 사용해봤다. Collections.sort(컨테이너, new Comparator<타입>(){ @Override public int compare(A, B) { ..... }});형태이다. 이때 결과는
위상정렬 문제
목표 : 그래프 탐색 이론(DFS, BFS), 위상정렬, 플로이드 워셜, 자바스크립트, 파이썬...................
백준 10156 python
Java에서 Queue 자료구로를 처음 사용해 보았다.Queue에 String과 int를 한번에 넣을 수 있도록 Student를 객체를 만들어 보았다.Queue 클래스의 경우 Queue students = new LinkedList<>(); 형태로 할당해줘야 한다
오랜만에 BFS 문제를 풀어보았다.처음 풀이할 때 포기하고 다시 도전해 본 문제다.첫 풀이 때는 치즈를 시작으로 BFS를 돌리려 해서 치즈 가운데 구멍을 해결하지 못해서 포기했다.문제를 다시 잘 읽어보고 배열의 가장자리는 전부 공백으로 치기 때문에 (0,0)에서 BFS
이렇게 덩치가 커질 문제가 아닌거 같은데 아직 java 자료구조를 잘 사용하지 못하겠다.
오랜만에 풀어본 다익스트라 문제이다. 가중치가 포함된 최단거리, 최소비용 문제는 다익스트라로 풀 수 있다.다익스트라, 위상정렬을 계속 진행하겠다.참고https://www.youtube.com/watch?v=611B-9zk2o4&thttps://blog
백준 2420 java
백준 11655 python
X가 1000000자리 아래 수만 입력된다길래 1000000아래 수라고 착각했다.문자열에 저장된 문자의 아스키코드를 문자, 정수형으로 변환하는 방법과 정수를 문자열로 다시 변환하는 법을 공부할 수 있다.
C++의 클래스를 연습해보았다.C++의 클래스는 자바의 클래스와 비슷하지만, 파괴자로 가비지 컬렉터를 따로 작성해줘야 한다. 이번에는 파괴자가 작성되어 있지 않지만 좀더 공부해 보겠다.
플로이드 워셜 알고리즘을 사용한다.구현이 잘 안되어 여러 군데 참고했다.https://blog.naver.com/ndb796/221234427842?trackingCode=blog_bloghome_searchlist객체 모듈형으로 만들어 보려했는데 해결 못 했
백준 10987 c++
백준 1449 java
파이썬은 끔찍하다
플로이드 워셜 알고리즘을 사용했다. 이번에는 최소비용을 구하는게 아니고, 길이 존재하는지만 확인했다.
플로이드워셜 알고리즘 연습 중이다. 2458번 문제처럼 연관관계만 필요한 경우 bool 벡터로 충분하겠지만, 최소비용이 필요하면 int 벡터로 생성해야 한다.최소비용이니까 BFS도 가능한거 같다...
플로이드 워셜 또는 다익스트라로 풀이한다. 다익스트라도 다시 연습하겠다.처음에 routeData를 초기화할때 직접적인 길이 없다는 의미로 1001로 초기화를 했다. 이때 만약 비용이 1000, 1000이라서 합이 1001 이상이라 경유하는 길이 있어도 갱신이 안되는 문
플로이드 워셜과 재귀함수로 그 경로를 찾는 문제다.경로 찾는게 너무 어려웠는데 다시 도전하겠다.
플로이드 워셜을 사용한 문제중 쉬운편이었다....
백준 2212 java
KT 코테에서 냅색 문제가 나왔는데 항상 약점이었다. 새로 공부할 목록 중 하나로 연습하겠다.
플로이드 워셜을 사용한다. 플로이드 워셜로 각 점에서 다른 점까지 이동하는 최소비용경로를 구하고 그 값이 m 아래인 지점의 아이템을 파밍할 수 있다.불필요한 반복문을 줄여볼 수 있을거 같다.
플로이드 워셜 결과를 바탕으로 원래 배열을 찾아내는 문제이다.이걸 몰라서 이미 플로이드 워셜 결과를 또 반복했다.각 알고리즘의 역에 대해서도 연습할 필요가 있을거 같다.
플로이드 워셜 결과에 대해 DFS를 수행한다. DFS도 다시 연습하겠다.
처음으로 자바스크립트를 사용해 문제풀이를 해보았다.환경 구축이 아직 어려운데 천천히 도전해보겠다.참고 : https://velog.io/@bami/%EB%B0%B1%EC%A4%80%EC%97%90%EC%84%9C-Javascript-%EC%9D%B4%EC%9A
플로이드 워셜 알고리즘을 사용해 주어진 모든 점에서 이동하는 거리의 합을 최소로 할 수 있는 도착지 점을 찾는 문제다. 처음 풀이에서 inputData() 함수에서 배열 내부를 채우는 Arrays.fill(secretRoutei, 1001);이 부분이 문제였다.여기서
플로이드 워셜 알고리즘을 사용한 간단한 문제이다.플로이드 워셜 결과를 수행하고 나면 모든 점에서 다른 모든 점으로 가는 최소 비용을 구할 수 있는데, 이 값을 제시된 시간값과 비교하면 된다.
문제 조건 중 이해하기 어려운 부분이 있었다.정답 조건은 왕복시간들의 합 중 최소를 구하는게 아니라 왕복시간의 최대값중 최소를 구하는 것이다. 그런데 실행시간과 메모리 사용에서 다른 풀이보다 비효율이 컸다. Scanner를 써서 그런것도 있지만 다른 이유가 더 있는거
코딩 테스트 대비용 냅색문제 풀이를 시작한다.
백준 14728 java
클래스를 활용해 저항 객체를 생성하는 법을 연습해봤다. 근데 메서드를 클래스 안에 넣을 수 있는데 따로 만든건 잘못한거 같다.
백준 1015 java
알고리즘 풀이의 방향성이 잘못된거 같다.java를 사용해 자료구조 -> 그래프 -> 다익스트라 -> 냅색 -> ...으로 다시 시작하겠다.
코딩 테스트 응시 중 C++ 말고 Java 자료구조의 부족함에 대해 뼈저리게 느꼈다. Java 자료구조부터 다시 해서 그래프, 다익스트라 등으로 다시 공부하겠다. 자바에서의 Queue와 Deque에 대해 알아봤다. C++보다 유연성이 있다. 나중에 다시 정리한다.
처음에는 map을 사용해 보려다 map의 경우 메모리와 조건 연산이 더 많이 필요할 거 같아서 set으로 바꿔보았다.일단 set에 다 넣고 크기 비교하기set의 contains()을 사용해 조기에 반복 탈출하기조기에 탈출하는게 미세하게 메모리나 시간부분에서 효율적이다.
java에서 스택을 사용하는 방법과 항상 놓치던 printf로 소숫점 아래 출력하는 방법을 연습했다.
처음에는 Stack, Queue를 사용해 보려 했는데 TreeMap으로 방향을 바꿨다. TreeMap 또한 사용해본 경험이 없어서 다시 정리가 필요하다.
첫 풀이는 문제가 요구하는 대로 스택 자료구조를 사용해 보았다.그러나 시간 초과가 발생한다.다른 풀이를 참고하던 중, 내가 구현한 방법은 문제가 요구하는 풀이는 맞지만, 모든 스택의 가장 위 요소를 모두 비교하다 보니 시간이 많이 소모된다. 모든 스택이 순서대로 제거되
모든 스택을 다 검사하게 되는데 스택에서 가장 큰 수를 알고 있다면. 그 수를 만나자 마자 BackTracking으로 가지를 쳐버리면 더 빨리 해결할 수 있다고 생각한다.
면접 결과 : 앞으로 막무가내 지원은 그만두자. CS 지식 습득을 우선시 하자.
백준 1969 java : Greedy algorithms
백준 2810 java : Greedy algorithms
오랜만에 c++을 사용해 봤다. 시간이 가능하다면 Java와 함께 풀이해보겠다.이번주 토익이랑 직무부트캠프 끝나면 좀 시간이 남을거 같다.
백준 19941 java : Greedy Algorithms
기업 코딩테스트 문제에 항상 나오는 배낭문제이다. 주로 DP로 풀이된다. 자료구조와 함께 우선적으로 풀이하겠다.
배낭 문제는 DP라고 생각하고 예시에 따라 표를 작성해야 한다.
백준 29704 c++ : 배낭문제 + DP
일반적인 배낭문제와 동일하다.
최대 가치를 구하는게 아닌 모든 경우의 수를 구하는 문제이다.백준 9084번과 동일한 문제다.
백준 22839 java : DP, 배낭문제
백준 5995 java : DP, 배낭문제
항상 최대 가치를 구하는 문제였는데 이번에는 반대로 최소가치를 구하는 문제이다. 그렇기 때문에 최대값 초기화와 Math.min 사용을 고려해야 한다.
백준 6144 java : DP, 배낭문제
DP를 1차원 배열 또는 2차원 배열로 만드는 경우의 차이와 구분 방법?DP를 역순으로 하는 경우와 이유?
백준 1965 c++
오히려 처음 생각한 방정식 풀이 방식이 맞았다...그런데 루프 한개로 A만 바꿔서 B를 구하는걸 이해를 못하겠다...
배낭보다 DP가 더 시급한거 같은데 DP는 문제가 한정되지 않아서 잘 모르겠다.
백준 17404 c++ : DP
오랜만에 c로 그냥 쉬운 문제를 풀었다. 처음에는 int 타입으로 배열을 만들었더니 피보나치가 예상보다 빠르게 증가해서 틀렸다.
백준 1141 c++ : 정렬
백준 9507 c++ : DP
백준 2548 c++ : 정렬
버블정렬 코드의 순회 횟수를 구하는 문제이다. 실제로 버블정렬의 순회횟수를 구하면 시간초과가 발생한다. 정렬할 값과 인덱스 값을 묶어서 저장한 후, sort()메서드로 정렬한 후 저장된 초기 인덱스 값과 정렬 이후 인덱스 값을 비교해 가장 큰 차이 값을 구하는 방식으로
피보나치와 동일하다. 타일 사각형의 둘레 길이를 구하는 규칙을 찾아내야 한다.
LIS와 LDS의 개념에 대해 공부하고 적용할 수 있었다.
두 물건의 가치를 동시에 비교하는 방향이라고 생각했지만, 사실 기존의 각각의 객체의 무게와 가치를 동시에 비교하는 방향과 다를게 없다.
각 물건의 개수가 하나인 다른 배낭 문제와 다르게 개수가 여러개 지정되어 있어서 고려해야 한다.
백준 2073 c++ : DP, 배낭문제
입력과정에서 입력횟수가 주어지지 않고 sstream으로 한 줄마다 파싱해서 벡터에 집어넣어야 했다.DP 수행 과정도 다른 배낭문제와 차이가 있다.
지정된 K를 정확하게 맞출 수 있는 커피잔의 최소 개수를 구하는 문제이다.DP 계산할 때 현재 인덱스의 값과 한잔 더 마신 경우를 비교해서 최소값을 현재 인덱스의 값으로 최신화 한다?...
백준 1750 c++
백준 1309 c++ : DP
백준 2225 java : DP
백준 2631 c++ : DP, LIS
백준 12852 c++ : DP
DP 푸는법 1. 패턴 찾아보기
DP를 푸는 방법 중 규칙을 찾는 방법으로 풀이해봤다.
LIS와 LDS를 구하는 알고리즘을 이용해 바이토닉을 구할 수 있다.각각 DP로 LIS와 LDS를 구하고, 바이토닉 = LIS\[i] + LDS\[i] - 1 을 통해 최대 바이토닉 수열 길이를 구할 수 있다.
경우의 수를 직접 구하며 규칙을 찾으려 했는데 찾지 못했다.i는 1일 때 : 1i는 2일 때 : 2i는 3일 때 : 3i는 4일 때 : 4i는 5일 때 : 5i는 6일 때 : 7i는 7일 때 : 8i는 8일 때 : 10i는 9일 때 : 12i는 10일 때 : 14i는
백준 11066 c++ : DP
2개의 문자열에서 공통문자열을 찾는 LCS에서 확장된 3개의 문자열에서 공통문자열을 찾는다.삼중반복문이 플로이드-워셜과 유사한거 같은데, 까먹기 전에 한번 더 해보겠다.
백준 5557 c++
너무 안 풀려서 다른 풀이를 참고했다. 처음에는 DP, 냅색으로 풀어보려 했지만, 조합을 찾는다는 개념으로 DFS로 접근하는 방법도 알게 됐다.전역변수를 안쓰고 싶었는데, 안쓰게 되면 매개변수가 너무 많아져서 보류했다.참고 : https://cclient.ti
백준 14002 java : DP, LIS
이번 코딩 테스트는 어쩌면 자바로 보게 될거 같아서 자바를 다시 연습한다. 문제 좀 똑바로 보자
Map 자료구조를 복습한다. 항상 키값과 value 값을 꺼내서 나열하는걸 까먹었는데 다시 정리해본다.또한 getOrDefault라는 메서드로 키값과 value값을 자유자재로 저장해보자.
DP 카테고리와 다익스트라 카테고리 둘 다 있다. 처음 시도할 때는 DP 카테고리 위주로 풀이 중이었고, 최소비용 문제라 DP로 풀이가 가능하다고 생각했다. 다익스트라 카테고리에서도 동일한 문제 번호가 보여서 두 알고리즘으로 연습해 보겠다.
다익스트라와 함께 클래스와 priorityQueue의 comparable 인터페이스 사용에 대해 공부했다. BFS와 유사한데 몇번 더 해봐야 할거 같다.정답 출력 할 때 대소문자 구분을 실수한 거 때문에 너무 시간낭비를 했다.
다시 정리...
백준 9020 java : 수학
플로이드 워셜로 풀이한 사람도 있었다. 좀 더 다익스트라를 연습해 본다.
백준 3584 java : 그래프, 트리
백준 15990 java : DP
백준 17626 java : DP
지금까지 bufferedReader를 안쓴 이유가 귀찮아서 였는데, Scanner와 비교해서 입력시간때문에 차이가 4배 정도 나는거 보고 생각이 좀 달라진다...DP 정리 다시...
참고 : https://velog.io/@emplam27/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EB%8A%94-LC
백준 17070 java : DP
백준 2670 java : DP
백준 10250 c : 구현
입력 없이 프로그래머스처럼 함수를 구현하는 문제다.
출력 조건을 잘 안읽어 출력제한오류가 계속 발생했다.프로그래머스 코딩테스트 모의고사 결과 단순 구현도 잘 못하는 실력이기에 시간낭비만 한거 같다.
c언어 동적할당을 공부를 잘 안하고 넘어가서 사용하지 못했다.문자열과 동적배열을 다시 공부하고 풀이해보겠다.
all과 empty의 경우 모든 수를 각각 초기화 할 때 이런식으로 작성을 했는데, 이런 문법을 범위 기반 for문이라고 부르며, 또한 S 내부의 값이 변경되지 않았다. 왜냐하면 temp는 S의 값을 복사해왔을 뿐 참조하지는 않기 때문이다.의도하던 대로 S값을 변경하려
c언어에서 map을 사용할 수 없기 때문에c언어에서 map을 사용할 수 없기 때문에 자료구조를 한번 수정했다. 또한 bool type을 활용하기 위해 \`\`\`
백준 14487 c++ : Greedy algorithms
java에 contains() 메서드를 활용한다.
쉬운 문제인데 문제 조건이 난해해서 반례를 찾아봐야 했다.
백준 11758 c : 기하
다른 사람들 풀이보다는 비효율적인 부분이 많다.
백준 14503 c : 구현
오래 걸리고, 메모리가 많이 필요한 문제긴 한데, 다른 사람들보다 두 배 정도 많이 필요했다. System.out.println 문제인가?System.out.println()도 문제지만 조건문 반복이 너무 많이 발생하기때문이다. 조건문 반복을 줄이고, StringBui
백준 9933 c++ : 자료구조
백준 14718 c : 구현 동적 배열로 전환
처음에는 재귀 방식으로 A 추가 또는 B 추가하고 뒤집기 를 모두 수행해서 S == T인 경우가 하나라도 있는지 판단하려 했다.그런데 S == T를 만족하는 경우 하나만 찾으면 되기 때문에 S에서 T를 찾는게 아니라 반대로 T에서 S를 찾는 방식이 더 효율적이다.
백준 2257 c++ : 자료구조
동적배열로 크기 지정 배열 만들어서 저장하려 했는데 다음으로 미룬다.
백준 14467 c++ : 구현
진입차수(순서)가 있는 방향성 그래프를 정렬할 때는 위상정렬을 통해 답을 찾아낼 수 있다.다른 그래프와 다르게 진입 차수를 저장할 자료구조가 필요하고, 큐를 사용해 순서를 찾는다.프로그래머스의 기능개발 문제와 함께 풀이하면 좋다.https://velog.io/
백준 2688 c++ : DP
백준 2592 c : 구현, 배열 포인터 매개변수
백준 4811 c++
백준 8979 c : 구현
백준 12489 c++
백준 1919 c++ : 구현
추가로 필요한 경비의 최솟값을 구하는 문제이다. 필요한 경비란, 필수적으로 추가해야하는 경비를 구해야 하기 때문에, 행 기준으로 구했을 때, 열 기준으로 구했을 때 최대인 수가 필수적으로 요구된다.
백준 1254 c++ : 문자열
참고공백문자 포함 문자열 입력받기 공백 기준 문자열 파싱문자열을 실수로 변환
참고입력버퍼 비우기
A진법을 10진법으로 변환 후 다시 B진법으로 변환했다. java에는 유연하게 진법을 변환하는 함수가 있는데 C++에는 없는거 같다.
성능이 굉장히 떨어진다. 결과가 좋은 풀이를 보면, 배열을 전혀 사용하지 않았다. 사실 보여주기 위해 배열을 사용한거지 배열은 필요 없는게 맞는거 같다.
백준 1783 java : 구현
백준 1159 c++
처음에는 DFS로 풀이했는데 진입 순서가 정해진 경우 위상 정렬이 더 효과적이다. 위상 정렬 풀이에도 처음은 단순 큐를 사용했는데, 문제 조건에서 선행 풀이 문제가 없는 경우, 난이도가 쉬운 문제(번호가 낮은 순)으로 풀이해야 하므로 우선 순위큐로 수정했다.
BFS를 하는데 queue 대신 deque를 사용한다.다음 경로가 벽이면 cost 값을 1, 아니면 0으로 저장한다."다음 경로에 미리 저장된 값"과 "현재 값 + cost"값을 더한 값을 비교해서 "현재 값 + cost"이 작으면 다음 경로 값을 갱신한다.그리고 다음
Point 클래스로 x좌표와 y좌표를 동시에 활용하는 자료구조 클래스를 만든다.
백준 2668 c++ : DFS
백준 29701 c++ : 구현, map
그래프 문제 같아보이지만 기하도형 계산 문제다.
쿠르스칼 정리
백준 13300 c++ : 구현
중첩반복문이 너무 많아서 수가 커지면 비효율적일 거 같다...
이런 형태의 문제에 특히 약해 쉬운거부터 다시 해본다.가로, 세로를 입력할 때 거꾸로 했는데, 가로로 자른다는게 y좌표를 의미하고, 세로로 자른다는게 x좌표를 의미하기 때문이다.
백준 2083 c : 구현, 구조체
DFS로 풀이했으며, bool배열의 visited를 구현하기 위해 map자료구조를 사용했다.S에서 T로 가는 것보다 T에서 S로 가는게 경로를 더 줄일 수 있다고 생각해서 거꾸로 접근했다.current의 뒤쪽 문자가 A면 제거, current의 앞쪽 문자가 B면 뒤집고
백준 2851 c++ : 구현
백준 9085 c, c# : 구현 c c
백준 1063 c : 구현
백준 21278 c++ : 플로이드 워셜
백준 1240 c++ : 트리, DFS 자료구조가 트리임을 감안해서 DFS 또는 BFS를 사용해 풀이한다. 트리는 싸이클이 존재하지 않기 때문에, DFS
백준 19951 c++ : 구현
백준 2828 c++ : 구현
DP = (int\*)malloc(sizeof(int) \* (n + 1));malloc : 동적 할당 + 초기화X(쓰레기값) DP = (int\*)calloc((n + 1), sizeof(int));calloc : 동적 할당 + 0으로 초기화DP = (int\*)r
vector와 sort를 매번 진행하는 경우 시간초과가 발생할 거 같아서, 정렬과 중복을 모두 지원하는 자료구조를 찾다가 multiset을 찾았다.multiset은 set의 종류 중 하나로, set과 동일하게 자동정렬을 지원하며, 원소의 중복을 허용한다.첫 시도에서는
업로드중..재귀 말고 스택을 사용하니까 꺼내는 순서 때문에 풀이가 잘 안된다. 게다가 지금 풀이도 메모리와 시간 소모가 너무 크다.
백준 1531 java : 구현
백준 27964 java : 자료구조
백준 14426 java : 자료구조, Trie 왜 Trie?
백준 1267 c : 수학
백준 1205 java : 구현
직사각형 내부에는 접근할 필요가 없다. 또한 직사각형으로 풀이한 결과 각 점을 x, y로 변환한 이후 동근이와 상점 간 거리를 구하기 위한 추가 연산이 필요하다. 그래서 직사각형 지도를 북동남서 형태로 직선으로 폈다.java 언어는 class를 구현하기 쉽다. 방향과
백준 2846 c : 구현
정수를 문자열로 고치기, 문자열 조작하기
크기가 작기 때문에 브루트포스 또는 DFS가 둘 다 가능할 거라 생각된다. 그러나, N값이 3이상으로 확장되는 경우를 상정해서 DFS로 구현했다.DFS는 BFS와 달리 최단 경로가 아니라 어떻게든 도착하는 경로가 존재하는지 여부를 확인할 수 있다.또한 DFS는 브루트포
순서가 상관없는 문자들의 조합을 구해야 한다. 문자 각각에 값이 지정돼 있으니, 문자열을 따로 만들지는 않는다. 조합, 즉 순열을 구하기 위해 주로 재귀 DFS가 사용된다. 재귀방식은 스택방식보다 구현이 쉽지만, 효율이 상대적으로 떨어진다. N의 최댓값이 20이고, 다
테스트 케이스도 전부 통과를 했는데 계속 틀렸다고 나왔다. 최댓값을 0으로 한게 문제였다.처음에 maxCount를 0으로 초기화하고 시작했는데, 이때 서로 아무도 만난 적이 없다면 가장 먼저 번호인 1번 학생이 나와야 하는데 그렇지 않았다.최댓값을 정수형 최솟값, 하다
Scanner 사용 -> BufferedReader로 수정해야 함w자료구조를 굳이 큐로 할 필요는 없는거 같다. 배열로 해도 되고, c를 미리 입력받으니 w자료구조를 만들지 않고 입력과 동시에 수행해도 된다.우선순위 큐는 큐처럼 조회순서를 정할 수 있고, 추가로 정렬
처음에는 Integer.parseInt()를 사용했는데, 조건에서 각 수는 1000000까지 입력이 가능하므로 두 수를 이어붙여 문자열로 만들면 10000001000000가 나와 Integer형을 초과한다.그래서 Long 타입과 Long.parseLong()을 사용했다
정렬을 사용해 높이순으로 정렬하고 나면, 투포인터를 제어해서 left, right 값을 바꾸며 단방향 연산이 가능하다고 생각했다. 배열 이외의 자료구조도 필요 없어 메모리도 아낄 수 있다고 생각한다.당연히 Scanner 클래스를 사용해서 그렇다. Scanner가 사용하
사실 큐는 필요가 없었다. 순서대로 나오게 구현하면 배열도 상관없다. 대신 예외를 발생하지 않는 offer,peek, poll 메서드를 연습했다.각 줄을 스택으로 만들어, 해당하는 라인을 확인해서, 현재 누르고 있는 프랫이 눌러야 하는 프랫보다 높다면, 낮은 프랫이 나
백준 2852 java : 구현
백준 1057 java : 수학
브루트포스로는 풀이가 쉽겠지만, 소모시간이 문제 조건을 충족하지 못할 것이라 생각했다. 이진 탐색으로 최대높이인 N부터 시작해 이진탐색으로 최소높이를 찾는다.
로직 자체는 쉽지만 문제를 잘 안 읽어서 로직을 계속 놓쳤다.또한 정렬->조회 보다 if문 탐색을 더 많이 사용해 문제 조건이 커지면 수행시간 초과가 발생 할 수 있다고 생각된다. 문제로직은 Least Frequently Used 알고리즘과 Least Recently
처음에는 DP로 기획했는데, DP의 경우, 순차적으로 0부터 목적지까지 증가하는 경우의 최솟값을 찾는데 유리하다. 지금처럼 N부터 M까지 증가와 감소, 그리고 목적지 이상, 이하로 넘어가는 경우의 최솟값을 찾는데는 BFS가 유리하다.
어려운 알고리즘은 아닌데, 자료구조와 class를 적극 사용해서 객체지향 프로그래밍을 연습하느라 오래 걸렸다.class 배열을 사용했는데, 정수 index로 접근하다 보니, 인덱스 - 1을 하는 것 처럼 추가 연산이 필요해서 실수가 발생할 수 있다. class배열 말고
후위표기법을 구현하는 방법 중 스택을 사용하는 방법이 있다. 연산자를 만나는 순간 스택에 저장된 피연산자 두개를 꺼내서 연산 후 다시 피연산자로 스택에 저장하는 것을 반복하는 방법이다.자바에서 스택의 메서드에는 push() : 추가pop() : 제거 후 반환peek()
입력 종료 조건이 없으니 BufferedReader를 사용해야 한다.map 자료구조를 사용해 참석자 아이디를 기준으로 출석여부를 갱신한다.
trees.getOrDefault(line, 0) + 1trees 맵에 line을 키로 갖는 값이 있다면 가져와서 + 1, 없다면 0으로 저장java에서의 맵 자료구조는 c++과 다르게 키값 기준 정렬을 지원하지 않는다. 그래서 키값 또는 키값+원소값을 ArrayLis
백준 9009 java : 그리디 알고리즘
백준 15681 java : DFS, 트리 다시정리
백준 15489 java : DP
수빈이의 위치에서 동생들을 찾아야 하는데 동일한 거리만 이동할 수 있고 배수는 상관 없음. -> 동생들 위치에서 수빈이 위치를 뺀 것이 동생과 수빈이의 거리 -> 각 거리의 최대공약수를 구하면 수빈이는 동일한 거리로 배수 상관없이 모든 동생을 찾을 수 있음.유클리드 호
재활용 : https://velog.io/@magicdrill/%EB%B0%B1%EC%A4%80-11053-cDP를 활용해 LIS를 구하는 문제이다.
중간에 list = temp;구문을 통해 list배열에 temp배열을 저장해 갱신한다.이는 얕은 복사로 shallow copy로 참조를 바꾸기 때문에 기존 배열의 크기와는 상관이 없다.또한 기존에 저장해서 메모리에 적재된 list의 데이터들은 메모리 누수의 원인이 될
백준 25706 java : DP
String 타입은 문자열 내부에서 정렬이 불가능하다. 그래서 문자열.toCharArray();를 사용해 문자열을 char 배열로 바꾼다.정렬 수행 후 다시 char배열을 String타입으로 바꿔야 한다.반대의 동작으로 Arrays.toString(배열명);을 사용한다
LR 연계스킬과 SK 연계스킬을 구분하는 스택을 두개 만들고 각 스킬의 사전스킬 사용여부를 판단해서 push, pop을 수행한다.
백준 2491 java : 구현
백준 14912 java : 구현
처음에는 그래프 탐색 문제라 생각했지만 아니다. 처음 테이블 모양을 시작으로 N의 값에 따라 모양은 정해져 있다. 그래서 N값에 따른 규칙을 찾아 정해진 모양을 출력한다.
init과 dest를 한 글자씩 비교하며 둘이 차이 나는 경우, 흑돌과 백돌 수를 따로 저장한다. 이후 흑돌과 백돌이 서로 상쇄하고 남은 개수를 통해 연산을 하려했는데, 저장한 값 중 더 큰 값이 정답과 같은 규칙을 발견했다. 처음 구상한 (백돌과 흑돌이 서로 상쇄하는
set의 특징을 이용해 문제를 풀이한다. set은 중복을 허락하지 않는다.매 순회마다 set 자료구조를 만들고 문자열의 len - k부터 시작하는 부분문자열을 삽입한다. set 자료구조의 크기가 문자열 배열의 크기와 같다면 중복 저장이 없다는 뜻이고, 이는 생성된 부분
백준 1145 java : 완전탐색
백준 2961 c++ : 완전탐색, 비트마스크 비트마스크?
입력 과정에서 각 테스트케이스의 숫자를 입력할 때, 몇개의 숫자가 들어갈 지 정하지 않고 입력받는 만큼만 저장한다. 그러므로 문자열로 입력받아, split으로 분할하고 정수로 파싱해서 저장한다. 이때 개행 문자를 입력받아 입력버퍼를 지워준다.C언어를 배울 때 학습한건데
Combination 연산을 최대 100까지의 숫자들을 이용해서 수행하면 금새 Long의 범위마저 넘어선다. 이때 BigInteger 클래스를 사용한다.일반적으로 int 값을 그대로 대입할 수 없고, valueOf 메서드를 통해 변환해서 넣어야 하며, 연산도 메서드를
백준 15658 java : 완전탐색 다시정리
백준 20125 java : 구현
재귀함수에서 return dfs(node, node\[current], layer + 1);와 dfs(node, node\[current], layer + 1);의 차이로 인해 첫 시도에서 메모리 초과가 발생했다.dfs(node, node\[current], layer
백준 14889 java : 백트래킹 다시 정리
입력 제한이 따로 정해진게 아니고 더 입력이 없다면 입력이 중단되는 형태다.이 코드는 로컬 환경에서 test하려면 EOF 신호를 보내야 한다.
백준 15235 java : 큐
백준 3077 java : Queue, Map
케이스들을 직접 구할 때는 조합의 반복인 줄 알았는데, 피보나치 수열의 규칙을 찾을 수 있다.
백준 17968 java : DP 다시정리
어려운 문제는 아닌데 그냥 클래스를 다시 연습해보고 싶어서 클래스로 풀이했다.