간단하게 최소 최대를 구하는 문제.그냥 컴공 시작하면 C프로그래밍 할 때 모르면 안되는 문제이다. 그냥 툭 건들면 바로 툭하고 나와야하는 문제.정말 많이 사용한다. 그냥 외워서 쓰면 편할 듯.
너무 오랜만에 C++을 사용하면서 헷갈렸던 문제. C에서 char형 포인터를 계속 사용했어서 너무 혼란스러웠다.
(int)로 형변환 가능.
타임아웃 에러c++의 cin, cout은 c의 scanf와 printf보다 느리다. timeout이 생길 수 있으니 그냥 scanf와 printf를 사용하도록 하자.
그냥 조합으로 풀면된다. n개의 다리가 향할 m개의 지점을 찾아주면 된다.
단순하게 시간을 계산하는 문제.H == 0 일 때 어떻게 23시로 바꾸어 주어야할까 고민하였는데 중첩문을 사용하지 않고 -1인 경우에만 바꿔주도록 고안하였다.
나눠줘서 거스름돈의 개수를 구하고 남은 거스름돈은 나머지를 사용해 계산할 수 있다.
동적 배열 할당을 써봤다.크기가 N인 배열이 있다면 인덱스는 0부터 N-1임을 기억하자.
오늘의 키포인트 c++은 stack 라이브러리를 가지고 잇다. 그걸 쓰면 바로바로 해결 완료
str을 10개씩 잘라서 치환할 생각을 처음에 했는데 굉장히 비효율적이다. 그냥 10의 배수일 때 \\n을 삽입함으로써 간단히 해결할 수 있다.
이 문제는 한수의 개수를 구하는 문제100 미만인 수는 2자리 수이기 때문에 무조건 한수이다.
500! 는 매우매우 큰 숫자라 long long으로도 커버되지 않는다. 수학적으로 접근해야한다.0이 생기려면 10의 배수라는 뜻이다. 10의 배수 = 2의 배수 \* 5의 배수 이므로 엄청 많은 2의 배수의 개수를 구하기 보다는 그냥 5의 배수의 개수를 구하면 된다.
그대로 주어진 함수를 사용하면 시간초과0 : 0 / 1 : 1 / 2 : 0 1 / 3 : 0 1 1 / 4 : 0 0 1 1 1이런 형태로 앞의 호출한 횟수만큼 더한 것과 같다.
최소를 구할때는 거꾸로 생각하자. 최소 + 최소 = 최소 (다이나믹 프로그래밍)
유클리드 호제법을 사용하는 것이 좋다.
수가 너무 크면 long long을 사용한다. 출력할 때는 %lld를 사용해 출력한다.
스택 문제의 바이블 str을 한 문자씩 쓰려면 str 입력을 받은 수 for문을 사용하여 char형 변수에 하나씩 저장하여 사용한다.
DFS는 재귀함수, BFS는 큐(for문)로 구현
C++에서 풀어보려다 자료형이 long long으로도 감당되지 않아서 python으로 급선회
이것도 숫자가 너무 커서 long long을 사용할 수 없어 파이썬으로 문제를 풀었다. 오랜만이라 다시 공부해가면서 푸는 중
시간 초과 에러정렬시킨 후 이진탐색(중위순회)를 이용해서 탐색 시간을 줄였다.
첫 골드 문제. 복습 필요. 너무너무 안풀려서 인터넷을 많이 참고하였다.그냥 별을 찍는것이 아니라 모두 배열에 넣는 것이 핵심.별의 시작점을 이용한다.삼각형을 모은 것들이 되풀이 되므로 재귀함수를 호출해야한다.
trigraph convert
무조건 낮은층, 1호실부터 찬다. 세로로 ||||| 이런식으로 왼쪽부터나는 이중 for문을 사용했지만 수학적으로 접근하는게 더 좋아보인다.
제일 작은 약수 \* 제일 큰 약수 = 원래 수
굳이 배열을 쓰지 않아도 됐다. 배열 쓰지 말고 나머지가 1일때 그 자릿수를 출력해주는 것이 더 효율적이었을 것이다. 결국 일을 두 번 하는 꼴이 되었다.
너무 어렵게 생각했다. 배열쓰고 아주 난리를 쳤다.컴퓨터는 16진수를 입력 받을 수 있다. 너무 오랜만이라 까먹어버렸음...
또 엄청 비효율적으로 풀고 말았다. 큐를 쓰긴 쓰는데 그냥 결과가 나오면 큐에 넣고 출력만 하는 그런 코드
에라토스테네스의 체는 배열을 이용하여 소수를 구하는 알고리즘이다.
pow를 사용하면 숫자가 너무 기하급수적으로 커지기 때문에 사용하면 안된다.우리가 필요한 것은 1의 자리 숫자일 뿐이다. 제곱해도 1의 자리수만 제곱해서 구해주면 된다.
입력되는 모든 수를 전부 배열에 저장하면 메모리를 초과한다.따라서 입력되는 수의 개수를 세서 개수만큼 출력시킨다.
이진 탐색을 STL을 써서 구현해보았다. 훨씬 깔끔하고 간단해서 좋다.
하나는 역순, 하나는 그냥 정렬을 써서 서로 곱해주면 최소값을 얻을 수 있다.
매번 검사를 하기 보다는 while(1)로 반복문을 계속 돌리고 0이 온다면 그때 break로 반복문을 깨버리는 것이 좋아보인다.
기본적인 스택 문제였다. 계속 스택에 값을 넣고 0이 들어온다면 pop시키면 된다. 마지막에 모든 수를 꺼내어 sum에 더해준 후 값을 출력해주면 된다.
전에 풀었던 요세푸스와 같은 형태의 문제, 이번에는 큐를 제대로 사용해서 풀 수 있었다.
처음으로 lower_bound, upper_bound STL과 vector를 사용해보았다.
STL 사용 연습 문제. vector, sort, erase, unique를 사용하였다.
이것도 다시 풀어봐야할 문제. C++의 언어적 특성을 배워가고 있는 중이다.sort는 3번째 인자로 함수를 넣어 내가 원하는 방식으로 정렬을 할 수 있다.
utility 헤더를 통해 pair를 구현할 수 있다. sort함수를 이용하면 first가 같으면 second로 비교하기에 sort함수를 이용해서 간단히 구현할 수 있다.
앞서 배웠던 것을 바탕으로 혼자서 문제를 풀어 맞출 수 있었다!
나는 첫글자와 '-' 다음에 나오는 글자는 무조건 출력하도록 하였지만, 다른 분들의 코드를 보니, ASCII 코드를 이용해서 대문자면 출력하도록 하는 분들도 많았다.
STL stable_sort를 사용한다.
어마어마한 반복문을 써서 문제를 풀었다ㅜㅜ 하지만 STL algorithm 헤더에 선언된 reverse() 함수를 쓰면 문자열을 역으로 만들어준다고 한다... 그걸 쓰면 훨씬 쉬웠을텐데
시간을 더 줄이기 위해 굳이 정렬을 하고 그럴 필요가 없다.브루트포스 알고리즘으로 전체를 순회하면서 나보다 덩치가 큰 사람의 수를 세어 더해주면 된다.
뭔가 시간 초과가 나올 것 같았지만 나지 않았다 신기신기 점점 효율적인 코드를 짜려고 의식한다는게 좋은걸지 아닌지 모르겠지만.
연결 리스트 STL 사용 연습용 문제. 자세한건 주석에 작성하였다.
처음 풀어본 삼성 기출문제. 가장 쉬웠던 브론즈 2에 해당하는 문제였다.
코드를 너무 어렵게 짠 것 같다. 내가 짠 경우에는 해당 문자가 불려온 적이 있는지를 체크하고, 만약 이전의 인덱스와 지금의 인덱스를 비교하고 만약 서로 이어지지 않고(인덱스가 다름) 이미 불려진 적이 있다면(알파벳 배열 수 0 아님) 그룹단어가 아니라고 보았다. 굳이
뭔가 뿌듯하다. 되게 간결하게 문제의 주어진 의도를 잘 파악하여 문제를 푼 것 같다.벌집의 최소 경로는 벌집의 겹(?)의 수이다. 그러니까 1번 겹은 1, 2번겹은 2~7, 3번 겹은 8~19 ... 이 벌집의 겹 수는 1, 6, 12 ,18 이렇게 6의 배수로 증가
사실 원래 생각했던 코드는 이거다. 대각선의 규칙을 찾았지만, 몇번째를 출력하려고 한다면 배열에 넣어야할 것이라고 생각하여 메모리 초과가 발생하였다. 그냥 몇번째 대각선의 몇번째 수인 것만 파악하여 바로 출력하면 되었을텐데.너무 어렵게 생각하는 경향이 큰 것 같다.
감동의 첫 골드, 인터넷 코드를 하나도 참고하지 않았다!! 너무 뿌듯하다.
이번에는 에라토스테네스의 체를 보지 않고 구현하기에 도전했다. 소수 출력하는게 너무 고민이 많이 되었지만 역시 또 생각을 너무 많이 한 것이 문제 같다. 그냥 n/2에서부터 시작하면 되었던 것이다.
재귀함수는 너무 어렵다. 그저 학습하고 반복해서 연습하는 것이 살 길일 것만 같다...0과 2의 배수에서는 점을 찍되 i와 j가 3으로 나눠질 때의 나머지가 1이 되는 경우에만 \*이 찍히지 않도록 하였다.
총 4번의 시도 끝에 맞춘 문제.풀리지 않을 때는 코드를 보기보다 반례를 생각해보고, 정말 모르겠으면 질문 검색란에 있는 질문에서 반례를 찾아보고 입력을 해보는 편이다.
진짜 아이디어는 있었는데 그걸 코드로 구현하는게 너무 어려웠다. 왜인지는 모르겠지만 한자기 아이디어에 꽂혀서 계속 while문을 돌려 출력시키려고 했고 계속 segment error가 나서 미치는 줄 알았다...
두번째로 푼 골드 문제. 역시 시간 초과에는 미리 값을 구해두고(에라토스테네스의 체), dp를 사용하는 것이 빠른 것 같다.
오늘의 백준 빼먹지 않으려고 푼 문제. 그냥 단순히 string 입력을 받고 해당 문자열을 순회하면서 해당 문자열이 원 문자열과 다르면 해당 문자를 ?로 치환하면 되는 간단한 문제이다.
최빈값에서 STL의 upper_bound와 lower_bound를 사용해보려 애쓰다가 다른 방식으로 틀어 풀게 된 문제.최빈값을 찾을 때는 index에 해당 개수를 세는 것이 제일 효율적인 것 같다. 크기가 너무 많지 않은 경우에는!
원래는 이진 탐색으로 풀지 않고 중간값에서 -1씩 해주며 풀었다. 당연히 타임아웃... 그래서 이진 탐색을 통해 풀기로 하였다.
전형적인 스택 문제. 하지만 공백을 입력받지 못해서 꽤나 헤메었다! getline(cin, str); // 한 줄 입력받기 를 통해서 한 줄 전체를 입력받을 수 있다.
기본 큐 문제랑 같은 문제. 다만 입출력을 빨리하는 것으로 바꿔주어야했다.라이브러리를 이용했기 때문에 느린 것이 아니라, cin cout endl 때문에 느린 것이었다.
뭐지 왜 쉬운데 골드 5 문제지?왼쪽에 있는 나보다 높은 탑의 번호를 출력하면 되는 문제.그냥 하나씩 스택에 넣어주면서 나보다 높이가 낮으면 pop하고 아니면 그 탑의 index 번호를 출력하면 되는 문제이다.
priority_queue STL 라이브러리 연습을 위해서 풀어본 문제우선순위 큐도 라이브러리로 구현되어있다니 놀랍다! 자동으로 정렬해준다니 정말 짱이야.
이진 탐색이라고 생각해낼 수 있어서 뿌듯했다. 코드는 아직 익숙치못해서 블로그에 예전에 푼 이진 탐색 코드를 확인하고 풀었다. 조금 더 풀어보면 바로 생각나는 날이 오겠지...그리고 범위 확인하고 int 말고 long long을 써야하는지 확인하자.
힙에 대해서 다시 공부해 볼 수 있는 시간이었다.트리를 사용하여 높은 값을 트리의 부모 노드에 배치하는 그러한 완전 이진 트리의 형태를 띈다. 시험보면 무조건 나와서 아직 까먹지는 않았는데 트리를 직접 구현하라니 시간도 많이 들고 너무 막막했다...
백준 11279 최대힙 문제와 동일한 문제. 다른점이 있다면 최소 힙(부모노드가 자식노드보다 작거나 같은 값을 가진다) 이므로 자동으로 내림차순으로 정렬되는 우선순위 큐를 오름차순 우선순위 큐로 바꾸어서 사용하면 된다.
힙만 주구장창 풀었다.우선순위 큐의 정렬 순서를 바꾸는 방법은 compare 함수를 override하여 사용하면 된다.
메모리도 고려하고 푸는 방식도 전부 생각해냈지만 아쉽게 시간 복잡도 때문에 좀 헤멘 문제. O(N^2)는 불가능하고 O(N logN)의 시간 복잡도에 맞춰야한다.
그냥 아무 생각 없이 시키는대로 풀었을 때 50점이 나온 코드알고보니 문자열의 길이가 50이 되면 숫자가 무지무지 커지기 때문에 오류가 발생하여 50점을 받은 것이다.문자를 잘 읽도록 하자. 해시가 너무 길면 안되니까 소수인 큰 수 M으로 나눈다는 말이 힌트로 적혀있다
너무 쉬운 문제인데 계속 무한 루프에 걸려서 의아해했던 문제...근데 바보같이 j를 계속 10으로 나눠줘서 for문이 제대로 작동을 안한 것이 문제였다 ㅋㅋㅋ 아니!!!나름 조금 숙달되었다고 생각했는데 이렇게 가끔 계속 실수를 한다. 연습만이 살 길 아자아자 화이팅.
숫자를 쉽게 입력받기 위해 인터넷 검색을 좀 이용하였다! 역시 모든 라이브러리는 존재한다.stoi : string to intisdigit : 숫자인지를 판별덱에 대한 성질을 알면 쉽게 풀 수 있다.앞과 뒤에서 모두 양방향으로 넣고 뺄 수 있다.
dfs 열심히 풀어보려고 공부하면서 푼 문제. 전형적인 bfs 문제라고 볼 수 있다.이런 미로 문제는 목적지를 찾자마자 최단 경로임을 보장할 수 있으므로 bfs를 사용한다.
bfs 연습용으로 푼 문제.bfs로 노드를 하나하나씩 체크해준다. 한 번 bfs를 돌렸을때 방문되지 않은 노드가 있으면 그것이 바로 연결 요소가 아닌 것이 있음을 뜻한다. 따라서 cnt 개수를 올려주고, 그 노드에서 다시 bfs를 돌린다.
BFS 연습용 문제.인터넷 검색 없이 내 힘으로 풀 수 있었다 만세!!BFS를 하면 간선이 연결되어있는 모든 노드를 검색한다. 1번 컴퓨터가 감염되었으므로 노드 1에서 BFS를 실행하면 된다.
for 문 2개로 탐색하였기에 O(N^2)의 시간 복잡도를 가진다.for문 2개 대신STL 라이브러리의 정렬(퀵 소트) O(N logN)의 시간복잡도와, 이진탐색 O(log N)의 시간복잡도를 가지도록 수정하였다.
오랜만에 백준 다시 풀기 위한 워밍업 문제. 아주 간단하다!정답률이 33% 정도던데 아마 메모리를 고려하지 못하여 그런 것으로 보인다. 아주 간단하게 풀 수 있는 문제다.
학생이 들어올 때 마다, 해당 index에 값을 추가시키고, 그렇게 완성된 배열을 반대로 출력시키면 된다.vector insert 함수를 통해 원하는 배열의 위치에 배열의 값을 추가시킬 수 있다.
여러가지를 pair로 묶을 때, pair는 한 번에 두개씩 밖에 묶지 못하기 때문에 pair 여러개를 사용하면 여러개를 묶을 수 있다.
STL sort 사용하면 아주 쉽게 풀리는 문제!
보자마자 큐를 사용해야겠다고 생각해냈다 굳 이제 간단한 자료구조는 금방 캐치해낸다!
쉬운데 5번이나 틀린 문제. 오늘은 날이 아닌가보다. 최빈값 자체를 재는 것과 실제 최빈값(index)는 다르다는 것을 명심하자.
아직 for문으로 배열을 사용하려고 할 때 바로바로 안나오는 것 같다... 아직 많이 고민하고 생각한 후에 풀어야한다 ㅠㅠ
생각한 것을 구현해내는게 은근 힘들었던 문제.
생각보다 단순무식하게 푸는게 옳을때도 있다. 왼쪽으로 빼는 것이 빠를지 오른쪽을 빼는 것이 빠를지 확인하기 위해서는 직접 빼보면서 구하면 된다. 하나를 구하면 하나는 바로 구할 수 있으므로 그냥 큐의 크기에서 왼쪽으로 뺐을 때를 오른쪽에서 뺐을 때로 구하면 된다.
6번이나 틀려서 고친 문제... 어이없어!
정보처리기사 필기 공부 이후 다시 돌아왔다! 이제 다시 점점 코딩 테스트 준비를 위해 적어도 1일 1문제를 풀어볼 것이다... 몸풀기로 정말 시키는대로 하면 되는 가벼운 브루트포스 문제를 풀었다 화이팅!
간단한 수학 문제다. N으로 나누었을 때 나머지와 몫이 같은 모든 자연수의 합을 구한다 \-> 역으로 생각해보면 'N \* 몫 + 나머지'의 수를 반복문을 돌면서 구해주면 된다.여기서 나머지는 나누는 값인 N을 넘을 수 없다.
미루고 미뤘던 마인크래프트 브루트포스 문제를 풀었다.한 줄 한 줄 구하면서 해당 높이에 해당하는 블록의 시간을 모두 구하면 된다. (브루트포스)이런게 왜 이렇게 머릿속으로 쉽다는 것은 아는데 귀찮기 짝이 없는 것인지 모르겠다. 그래도 해야지 어쩌겠어...
원래 pair를 사용해서 반복문을 돌면서 출력하도록 하였지만 시간 초과가 발생하였다. 탐색 시간을 줄이기 위해서는 map이 더 효율적이라는 것을 아게 되었다.map은 pair의 업그레이드 버전이라고 생각하면 편할 것 같다.
백준 1620 문제와 유사한 문제. 덕분에 금방 풀 수 있었다.동일하게 map을 사용해 볼 수 있었고 연습하는 문제가 되었다.
메모리를 조심해야한다. num의 크기를 1001로 만들었는데 오류가 발생했다. 내 생각에는 numi++ 때문에 1001번째 번지에 값을 넣고 i++로 overflow가 발생해 메모리를 침범한 모양. i++를 쓸 때는 조심하자.
오늘의 몸풀기 문제. 그냥 간단하게 반복문을 사용하면 된다.
백트래킹 연습용으로 푼 문제.백트래킹은 DFS를 생각하면 좋다. DFS는 스택이랑 재귀로 구현할 수 있는데 여기서는 재귀함수를 이용해서 풀었다.가로 세로 대각선이 모두 겹치면 안된다.
백트래킹 dfs 연습용 문제. 재귀를 이용해서 풀었다.다시 수련이 필요하다... 알 듯 말 듯 하면서 모르겠는 백트래킹.그래도 잘 생각만 하면 코드가 짧아서 좋다.
오늘의 백준 몸풀기 문제그냥 구현 문제, 그래프를 보고 두려워하고 싶지 않아서 연습하려고 푼 문제다. 나쁘지 않다! 10분만에 바로 풀어버리기~
백트래킹 연습용 문제. tmp를 따로 구한 다음에 dfs 재귀함수에 넣어 계속 틀렸다고 떠서 생각을 고치는데 너무 힘들었다ㅜㅜ tmp값이 변화하면 다른 tmp값에도 그대로 영향을 미치기 때문에 값을 변수에 저장하지 않고 재귀함수의 매개 변수에 값을 넣어주면 된다.
전형적인 DFS 연습용 문제. 처음에는 BFS가 쉬웠는데 이제는 DFS가 쉽게만 느껴진다...정말 학습 능력이 없다. BFS 좀 풀만해졌더니 홀라당 까먹고 DFS로만 풀기사실 아직 예전 코드를 많이 보고 풀어야한다. 계속 계속 풀면서 체화시키는 수밖에 없겠지.화이팅!
2 31 2 48 16 3231 1 2 31 2 1 21 3 2 3헷갈리면 안된다.1 3 2 3 -> (1,3)에서 (2,3)까지 다 더하는게 아니라 (1,3)이랑 (2,3)만 더하면 된다. x범위, y범위에서만 이렇게 더하면 된다.
오늘의 몸풀기 문제.정말 정석 중 정석 문제로 생각하면 될 것 같다.
DFS 연습용 문제. 직관적으로 그래프를 그릴 수 있어서 생각보다 쉽게 생각해 볼 수 있었다.이제 조금 더 익숙해진 느낌적인 느낌 느낌
시뮬레이션을 연습해야하는데 코드 양도 많고 좀 익숙하지 않아서 브론즈 문제부터 풀면서 연습하려고 한다.
시뮬레이션 연습용 문제.공이 사라진 경우에는 -1을 출력하면 된다고 하던데 공이 사라질 경우가 생길수가 없어서 무시했다. 함정이었던 것일까?자소서 작성이 얼추 끝나서 다시 이제 코테 공부 열심히 달려봐야지 화이팅\~~ 한달동안 하면 뭔가는 되겠지
시뮬레이션 이전에 버블정렬을 직접 구현하고 이걸 출력하는 문제다.굳이 실버5 문제여야하는지는 잘 모르겠다.
왜 바로 풀지를 못하고 생각을 좀 했어야했는지. 아직 수련이 많이 부족한 것 같다.그리고 0 <-> 1 반전에 비트반전을 써보려고 했는데 비트반전을 하면 -1이 되는 것 같더라 ㅋㅋㅋ 왜 그 생각을 못했을까약간 에라토스테네스의 체를 응용한 문제처럼 풀었다.
브루트포스 연습용 문제.
시뮬레이션 연습용 문제. 대략 4시간 쯤 걸렸다. 아직 익숙치 못한 슬픈 나...인터넷도 많이 찾아보고 이런 문제를 접했을 때 어떤식으로의 접근법이 효율적인지를 공부하는 중이다.
STL 라이브러리인 reverse를 사용해서 간단하게 풀었다.원래 실제 역순을 취하는 알고리즘을 짤까 하다가 배열 두 개를 선언하고 복사하여 이용하려고 했지만 굉장히 비효율적이라는 생각이 들어 STL 라이브러리로 대신하게 되었다.
해냈다 평생의 숙원!!
DFS 연습용 문제
처음에는 그래프 탐색이라 DFS로 풀었는데 인접된 것을 차례로 카운트 해나가야 했기 때문에 BFS로 다시 푼 문제다
7576 토마토의 업그레이드 버전 문제
시뮬레이션 연습용 문제. 링크드리스트를 사용해야할까 고민했지만 단순하게 그냥 배열의 index를 사용해서 풀었다.
백트래킹 연습용 문제. 사실상 인터넷보고 공부하면서 풀었다. 아직 바보라서 보고 바로 백트래킹이라는 것을 떠올리지도 못했고, 힌트를 보고서도 백트래킹 구현하는 뾰족한 수가 생각나지 않아서 기본적으로 다들 짜는 코드 스타일을 공부하고 다시 짜보았다.
백트래킹 연습용 문제백트래킹이라고 해서 방문여부에 변화를 무조건 주어 문제를 풀 생각을 하지 않아도 좋다. 수학적으로 접근해도 괜찮다.
사실상 백트래킹 문제라고 볼 수 있나? 라고 푼 문제다. 모든 경우의 수를 다 구하면 되므로 방문 여부를 아예 따지지 않아도 된다. 따라서 그냥 재귀함수만 계속 반복하며 모든 경우에 대한 수를 구해주면 된다.
이번 문제도 백트래킹에 수학적인 조건을 주어 푸는 문제였다. 앞에 나오는 수보다 뒤에 나오는 수가 같거나 크도록 조건을 주어, 해당 조건에 해당하면 순열으르 저장할 수 있도록 하는 것이다.
드디어 인터넷을 전혀 참고하지 않고 삼성 기출 문제를 풀 수 있었다! 물론 백트래킹으로 풀어야한다는 것은 너무 명백했고, 공부한 것을 바탕으로 응용해서 문제를 푼 것이긴 하지만 말이다.
Big Integer를 사용해야해서(1000자리의 정수 입력됨) C++를 이용하면 배열을 사용해서 어렵게 문제를 풀어야했다. 그래서 Python으로 푼 문제. 확실히 엄청 큰 수가 나오거나 문자열 관련 문제는 파이썬을 사용하는 것이 쉽다.
메모리 제한 또는 시간 제한이 걸릴까봐 걱정되었는데 512MB, 2초정도면 모든 임시값을 copy해도 괜찮을 정도라는 것을 알게 되었다.
오늘은 머리가 잘 안 돌아가서 그냥 잊지 않기 위한 쉬운 문제로 하루치 대신하기... 내일은 다시 짱이 되어야지32bit 정수까지라고 하면 int형이 가능이지만 64bit 정수라면 long long을 써야한다. 그것때문에 한 번 틀렸다... 항상 수의 범위 잘 생각하기
원래 인접한 사각형으로 테스토미노가 이어지기 때문에 BFS를 사용하려고 했지만 브루트포스로 모든 경우의 값을 찾아야하기에 전역 큐를 사용하면 원하는대로 값이 잘 나오지 않았다. 때문에 DFS를 사용하게 되었다.
처음에는 하나하나 구하는 브루트포스로 풀었다가 접근 방법이 틀렸음을 알고 인터넷 많이 참고하고 푼 문제. 다음에 다시 풀어봐야겠다... 다이나믹 프로그래밍을 사용한다.퇴사일을 고려하기 위해 뒤에서부터 앞으로 dp를 구한다.
쉬웠던 시뮬레이션 문제. 그런데 은근 한 조건을 빼먹어서 꽤 애를 먹었다ㅜㅜ 꼼꼼히 문제를 보기, 로봇을 올리는 것도 내구도가 단다.배열과 덱을 처음에는 혼용해서 사용하였는데 매우 비효율적이다.
파이썬으로도 코테 문제를 좀 풀어야할 것 같아서 그동안 일단 내버려두었던 큰 수를 다루는 문제, 파이썬으로 풀어야 용이한 문제를 다시 풀기록 하였다. 다 까먹었네... ㅋㅋㅋㅋ 이 문제도 기억이 안나서 꽤 많이 틀렸다. 33%의 정답 비율에 일조한 나.
말랑말랑 두뇌 트레이닝 문제. 생각해보는 재미가 있었다.가장 아랫줄 정사각형의 길이가 주어진다. 하지만 이 사각형으로 만들어진 피라미드의 변은 사실상 정사각형의 변의 길이와 같다!
나에게 남은 시간 수, 목, 금, 토... 과연 삼성 마스터가 될 수 있을까...ㅠㅠ 제발 이런 문제 나왔으면 좋겠다.방향 헷갈리지 말기 우리가 생각하는 가로는 x가 아니라 y이고 (0, 0)이 좌측 상단이기 때문에 -와 +가 반대이다.
살릴 치킨 집을 고르는 경우의 수를 찾으려면 백트래킹을 이용해야한다. (순열과 같다)
map library 사용 연습을 위해 푼 문제다.원래 위와 같이 comp를 사용해서 sort를 시켜 쉽게 값을 얻어내려고 했는데 정렬이 생각만큼 잘 안되었다...
해싱 연습용 문제.토스 코테에서 비슷한 문제가 나왔다. 그때는 아마 이름이 중복되어서도 입력된다고 했던 것 같음. 여기서는 이름이 중복되지는 않는 문제이다.따라서 이름은 신경쓰지 않아도 된다. 오직 종류만 보면 된다.
segmentation fault 에러 무진장 많이 나서 왜 골드 1인지 알 수 있었던 문제...인터넷 좀 열심히 찾아봤다.
이제 삼성 공채를 위해 하루 2문제씩 풀어보려고 한다. 그래서 그 시작을 위한 구슬 탈출 문제.사실 인터넷 보고 풀었다... 아무리 생각해도 어떻게 한 방향을 계속 가는 것을 탐색할 수 있을지 생각이 안났다.
생각은 내가 해서 풀었다 야호!!! 멋져 발전하는 나~
스킬따위 필요하지 않고 진짜 독해와 구현만이 필요했던 문제... 이래도 되나?
와 구현 노가다 문제는 진짜 진짜 어렵다... 시간 정말 오래 걸린듯
처음에는 회의실 배정을 시작 빠른 순서로 정렬시켜서 틀렸는데반대로 생각해보는 것이 중요한 듯 하다.끝나는 순서가 빠른 것들을 열심히 골라주면 그냥 그것이 답이다... 원래 그런건가 아니면 테스트 케이스가 부족해서 그런건지. 아무튼 제대로 된 알고리즘은 아니라고 생각함.
인터넷 열심히 참고함... 하 어렵네 골드 5도 빌빌거리는데 어떡하냐
진짜 독해가 중요하구나 느꼈고 관성적으로 하는 코딩의 무서움을 느낀 문제.
배열 회전 알고리즘 암기하기
진짜 울트라 짬뽕 문제 흐아아
정말 구현하는 문제.내 힘으로 풀었다 뿌듯!
시뮬레이션과 BFS를 합친 문제.점수를 계산하기 위해서 같은 값인 친구들을 탐색에는 BFS, 주사위 rotate는 시뮬레이션이다.값이 이상하게 나오면 주사위를 이상하게 한 것이니 확인하도록 하자.
진짜 노가다 문제
인터넷 열심히 보고 풀었음. 사람들은 너무 천재같다.
sort를 쓰려고 pair를 썼는데 그래서 first, second의 늪에서 허우적거렸다.
와 인터넷 열심히 보고 분석하면서 풀었다. 골드2 문제부터는 너무 어렵다
처음으로 아예 문제 힌트조차 얻지 않고 그냥 혼자 힘으로 풀어낼 수 있었던 문제! 청소년 상어와 비슷하지만 아무튼 슬슬 감을 잡아가는 것 같아서 너무 뿌듯하다.
와 진짜 y, x 잘 못 써서 2시간 헤맸다. 너무 힘들었음.수명이 깎임....
아 꽤 헤맸다. 진짜 반례 만드는게 너무 어려움... 맨날 반례 검색해서 보고 그제서야 오류 수정하기 일쑤다.
진짜 너무 괴로웠음. 아 조금만 더 하면 될 것 같은데... 하면서 했는데너무 힘들더라고...맵(2차원 배열)과 구슬을 저장하는 벡터(1차원 배열)을 동시에 사용했다.
뭔가 DFS를 이용하여 최적의 상어 이동 방향을 정해야겠다는 생각을 했는데그걸 구현하기가 너무 어려웠다. 인터넷 열심히 참고함.
무지무지 오랜만에 다시 알고리즘 공부를 시작... 전부 까먹었다 일년정도 코딩을 안했기 때문. 취업을 하더니 더 바보가 되어버렸다. 이제 진짜 개발자력 향상을 위해 노력해야지...아무튼 그 시작으로 몸풀기 문제를 풀었다.
모든 재료는 고유의 번호를 가지고 있었기 때문에 2 포인터를 이용해서 모든 경우의 수를 구하는 쉬운 구현 문제였다.
오랜만에 푼 BFS 문제.딱 보고 BFS라고 생각했는데 DFS인지 아닌지 고민하다가 BFS로 풀었다.이거 두 개 중에 뭔지 고민하는게 제일 어렵더라.