본문 바로가기
끄적끄적/회고록

11월 2주차 회고록

by 엑츄얼리 2022. 11. 14.

매일 알고리즘을 풀기로 한 것은 잘한 것 같다. 스터디를 오전에 진행하다보니 아침 일찍 일어나게되고 그러다보니 하루를 길게 쓴다. 다만 부작용으로는 잠을 너무 늦게자는 바람에 목요일부터였나.... 졸려서 정신을 못차렸다. 그리고 일요일은 하루종일 잤다 ㅋㅋㅋㅋ 이게 맞나.... 조금 일찍자려고 노력을 해야될 것 같다.

생각보다 공부하는 시간에 비해 공부하는 양이 얼마 안된다. 정확히 말하자면 앉아있는 시간에 비해 공부하는 양이 얼마안된다. 백기선님이 스프링 관련해서 공부하는 방법을 유튜브에 찍은 동영상을 봤었는데, 딱 그 말이 떠오른다. 처음 공부할 때는 가성비 수준까지만 공부하면 된다고.... 수준에 맞지 않는 부분을 너무 깊게 이해하려고하는데 시간을 많이 쓰는 것 같다. 가성비를 생각해서 공부하는 습관을 길러야한다. 내가 꾸준히 한다면, 언젠가는 궁금해하던 깊은 부분을 지금만큼 많은 시간과 노력을 들이지 않더라도 이해할 수 있는 날이 올 것이다.

 

알고리즘

시뮬레이션

https://www.acmicpc.net/problem/20056

 

20056번: 마법사 상어와 파이어볼

첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치

www.acmicpc.net

문제를 푸는데 7시간이 걸렸다. 최초부터 접근방법은 맞았으나,

구현 과정에서 자료구조를 너무 많이 사용해서 메모리 초과가 걸렸다.

시뮬레이션 주의 사항

  • 주어지는 변수가 많기 때문에 모든 변수의 범위를 주의깊게 살펴야한다.
    하나하나가 폭탄이다....
  • 구현하려는 방식을 결정하는 과정을 구체적으로 생각해보자.
    예를 들어 자료구조는 어떤 것을 사용할지, 시간복잡도는 적당한지 등등
  • 구현하려는 방식을 외부에 적어두고 하는게 좋을 것 같다.
    구현력을 요구하는 알고리즘이다보니 예외 사항들을 빼먹고 작성하기 쉽고,
    디버깅할 때 하나하나씩 찾아가는 것도 일이다.

 

DP

https://www.acmicpc.net/problem/2293

 

2293번: 동전 1

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다.

www.acmicpc.net

https://www.acmicpc.net/problem/2631

 

2631번: 줄세우기

KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기

www.acmicpc.net

의도하지는 않았지만, 우연히 memoization을 활용해야하는 문제를 연속으로 2문제 풀게됐다.

memoization은 재귀를 학습하다 알게된 개념인데, 채화가 되어있지 않다보니 재귀 문제에서는 안 쓰고 해결을 많이했다.

이번 기회를 통해 이 개념을 정확히 학습할 수 있었고, 어떤 경우에 적용해야 하는지도 이해할 수 있어서 의미 있는 경험이였다.

 

그리디

https://www.acmicpc.net/problem/1461

 

1461번: 도서관

세준이는 도서관에서 일한다. 도서관의 개방시간이 끝나서 세준이는 사람들이 마구 놓은 책을 다시 가져다 놓아야 한다. 세준이는 현재 0에 있고, 사람들이 마구 놓은 책도 전부 0에 있다. 각 책

www.acmicpc.net

그리디의 경우 코테에서 출제될 경우, 다시 말해 문제를 읽고 그리디라고 느껴지는 경우는 최대한 뒤로 풀이를 미루기를 추천하더라. 그 이유로는 그리디로 구현하는 문제가 아닐 경우, 시간 복잡도와 공간 복잡도가 너무 커지는 이유가 가장 클 것이다. 

어쨌든 이 문제는 그리디라고 하면 그리디인데, 문제에 적힌 것 이외에는 예외 사항이 없어서 시뮬레이션이라고하면 시뮬레이션이지 않나 라는 생각이 들었다. 그만큼 직관적이였지만, 정답을 도출해내는 과정에서 골머리를 앓았다. 쉬운 문제라 생각하고 아무생각 없이 구현하다보니, 구현한 방식으로는 정답을 구해낼 방법이 생각나질 않았다. 결국 전체 코드를 엎어야했고, 다시 한번 코드를 작성하기 전에 구현 방식을 명확히 해야겠다고 다짐했다....

 

 

다음주 목표

1. 자바 인강 Chapter.6까지

2. 알고리즘 매일 1문제

'끄적끄적 > 회고록' 카테고리의 다른 글

11월 3주차 회고록  (2) 2022.11.22
11월 1주차 회고록  (2) 2022.11.08

댓글