일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- django
- 14888
- Java
- 인스타
- 1182
- Ajax
- 17136
- 6603
- 17472
- 14502
- 구슬탈출2
- 다리 만들기2
- 17144
- 좋아요
- 색종이 붙이기
- 재귀
- 알고리즘
- 괄호추가하기
- 9095
- 인스타그램
- 17143
- 16637
- 로또
- 백준
- 부분수열의 합
- 연산자 끼워넣기
- 장고
- 미세먼지 안녕!
- 댓글
- 따라하기
- Today
- Total
목록백준 (59)
Be a developer
오랜만에 글을 올리게 되었다. 자바 교육을 받게 되어서 이제 부터는 자바로 풀게 되었다. 조금 힘들게 문제를 풀었다. 저번에 한 번 풀다가 도저히 못 풀것 같아서 다른 분들 코드를 참조했었다. 그러다가 흐지부지 넘어갔었다가 다시 풀게 되었다. 그 때 코드를 조금 봤던 덕분에 어떤식으로 풀어야 할지 대강 감이 오긴 했으나 역시 이번에도 힘겹게 풀었다. 7번? 정도 틀린 후에 질문 게시판에서 여러 테스트 케이스를 넣어 보고 겨우 통과했다. BFS를 이용한 시뮬레이션 문제라고 생각하는데 그 조건들이 꽤나 까다로웠던 것 같다. 그래서 여러가지 경우의 수를 잘 생각하고 풀어야 하는 문제인 것 같다. 먼저, BFS를 이용해도 dr, dc를 이용해서 한 칸 정도씩 이동하는 것은 해보았지만 이 문제처럼 해당 방향으로 ..
정처기 공부를 한다고 오랜만에 문제를 풀었다. 사실 정처기 하다가 지겨워서 잠깐 풀다가 다음날 또 풀다가, 다시 풀었다. 처음에 뱀을 저장하는 방식으로 vector를 사용했다가 코드가 너무 복잡해져서 다른 방법을 생각해보니 deque가 생각났다. 뱀이 이동할 때 추가되거나 삭제 되는 곳은 머리 혹은 꼬리 뿐이기 때문에 쉽게 front, back을 수정을 할 수 있는 deque을 사용하여 다시 코드를 작성했다. 먼저, 벽을 만나거나 몸을 만나면 종료를 해야 하기 때문에 이를 처리한다. 그리고 다음 칸이 사과면 꼬리는 그대로 두고, 머리만 front에 추가한다. 다음 칸이 사과가 아니라면 머리를 front에 추가하고, 꼬리는 back에서 pop시킨다. 방향만 잘 설정해주고, 방향을 바꾸는 시간대를 따로 ve..
일단 문제가 길어서 좀 잘렸다.. 처음 봤을 때 좀 복잡하겠다 싶었는데, 문제 자체가 어렵다기 보다는 index를 가지고 노는 것이 힘들었던 문제였다. 문제를 읽고 이해가 안되었던 부분도 있었고.. 그래서 힘들었던 것 같다. 결국 index 때문에 정신이 혼란해서 강의를 보고 풀게 되었다.. 1. 먼저 잘못한 것은 경사로를 놓을 수 있는지 check할 때, i와 i+1 두 인덱스를 가지고 검사하려다 보니, 한 칸씩 검사를 하면 되는 것을 두 칸씩 검사하여 코드도 복잡해지고 내 머리속도 복잡해졌다.. 어떤 인덱스를 기준으로 왼쪽으로 더 가거나 오른쪽으로 더 갈 때 i-j, i+j와 같이 푸는 방법을 잘 기억해둬야겠다. 2. 길을 찾기 위해서는 행이든 열이든 한 줄씩만 검사하면 된다. 처음에 그렇게 풀려고 ..
코딩 테스트 치러가기 전에 풀다가 2일 뒤인 오늘 마저 풀게 된 문제이다.. 무슨 정신상태로 했는지 코드가 엉망진창이었다. 시뮬레이션 문제답게 조건만 맞춰주면 되는 문제이다. 다만 신경쓸 것은 방향이 주어지기 때문에 그에 맞춰서 dr, dc 배열을 선언해주면 편하다. 또한 dir을 바꿀 때 % 연산자를 통해서 쉽게 변경하는 것도 쉽게 문제를 푸는 방법이다. 자주 쓰이는 방법인 것 같다. 그리고 scanf로 계속 입력을 받았는데, cin과 cout을 좀 더 쓰도록 노력해야 겠다. 쓰는 방법을 잘 익히고 있어야 될 것 같다. 아래는 코드이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051..
삼성 코딩 테스트를 치고 와서 다시 마음을 다잡고 알고리즘을 공부하기 시작했다. 하루에 2문제 이상 꼭 꾸준히 푸는 것을 목표로 해야 겠다. 시뮬레이션 문제는 조건에 따라 풀기만 하면 되지만, c++ 숙련도를 높이는 좋은 방법이라고 생각한다. 이번 문제도 시뮬레이션 문제로서, 문제를 잘 이해하고 그에 맞춰 코딩을 하면 된다. 하지만 항상 그렇듯이 바로 코딩을 시작하지 않고, 먼저 생각을 한 후 코딩을 시작했다. 문제를 푸는 핵심은 방향에 따라서 이동하는 코드를 쉽게 하도록 dr, dc 배열을 두는 것이 하나 있다.(dr, dc의 인덱스를 문제에 주어진 방향과 맞추면 더 편하다.) 다음으로 주사위를 돌릴 때, 주사위의 값들을 이어서 바꿔주는 것이다. 4가지 방향이 있으므로, 각각 함수를 만들어 주어서, 코..
조건도 많지 않고, 문제도 간단하여 풀기 쉬운 문제였다. 재귀 함수를 이용하여 완전 탐색만 진행해 주면 되었다. 선수들을 배열로 놓고, idx를 증가시켜가며 추가하거나 추가하지 않는 경우의 수를 나누면 되었다. 추가한 선수들을 true로 두어서, cal함수에서 이중 for문을 돌며 true인 두 선수의 능력치를 더해주었다. 이어서 false인 두 선수의 능력치를 더하였다. 마지막으로 두 합의 차이를 ans vector에 저정한 후 min_element함수를 통해 출력하면 끝이난다. 코드는 아래와 같다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#incl..
문제가 너무 길어서 짤렸다.. 처음 문제만 읽어 보고 나서 쉬운 문제라고 생각했다. 1시간 안에 끝날 줄 알았는데 2시간 걸렸다.. 너무 안일하게 생각하고, 구체적으로 어떤 프로세스로 돌아가는지 생각하지 않고 코딩하기 시작했다. 앞에서도 같은 실수를 여러번 반복했기 때문에 구체적으로 생각하고 들어가려고 조심하고 있었고, 이번에도 구체적으로 생각했다고 생각했는데, 사실은 구체적이지 않았던 것 같다. 계속 뭐가 잘못됐는지 찾다가 톱니바퀴가 아니라 내가 돌아버리는 것 같았다.(뇌도 돌아버리는 것 같았다.) 계속 알고리즘 문제를 풀다보니 반복하는 부분을 함수로 계속 만들고, 코드도 처음에 비해서 조금씩 군더더기를 걷어내고 있는 중인 것 같긴하다. 하지만 여전히 아쉽고 매우 매우 매우 매우 많이 부족하다. 1. ..
예제가 많아서 조금 짤렸다.. 오랜만에 시간 안에 푼 문제이다. 1시간 40분 정도 걸려서 푼 것 같다. 처음부터 손으로 정리를 하고 풀었더니 문제가 쉬운 건지 모르겠으나 비교적 쉽게 풀었던 것 같다. 1. 오른쪽으로 쭉 감시 방향을 체크하는 함수, 왼쪽, 위, 아래로 감시하는 함수를 각각 만들었다. 처음에는 하나의 dfs 함수에 다 구현하려 했으나 너무 같은 코드가 반복되어 함수로 따로 만들어 주었다. 그랬더니 cctv의 종류에 따라 맞는 함수만 골라 쓰면 되어서 편하게 구현할 수 있었다. 2. 재귀로 구현되기 때문에 종료 조건이 있어야 한다. 선택한 cctv의 개수가 총 cctv의 개수와 일치하면 사각지대의 수를 ans vector에 넣는다.(나중에 최소값을 찾기 위해 사각지대 수를 넣어둔다.) 이 ..