어제 병원을 다녀왔는데 상태가 많이 호전되고 있어 한 약의 용량을 200mg에서 150mg으로 줄이기로 했다! 또한, 피검사로 몸 상태를 볼 때가 되어서 체혈도 하고 왔지.
으으 너무 좋다ㅜㅜ 호전이라니.. 이게 얼마나 오랜만에 듣는 소식인가😆
건강식으로 더 빠르게 나아지고 싶어 집에 남은 재료가 있는지 생각해봤는데 오늘 아침에 다 썼네. 그래서 근처 이마트에서 한번 장을 보면서 생야채들을 건졌다.
요새 애용하는 고등어도 더 사고 벌집 삼겹살에 쌈 채소, 그리고 ABC쥬스의 해독효과도 보고자 당근과 비트도 골라준 뒤 나머지 채소들은 990원의 행복 코너에서 여러 종류를 골라담았다.
그러곤 집으로 돌아와 만들어둔 김치전 반죽을 굽고 삼겹살도 알맞은 마이야르 반응이 되도록 구워준 뒤 쌈채소 함께 저녁으로 먹었다.
앞으로도 건강식으로 꾸준히 챙겨먹어야지 응응
다이소에 짱구 마스킹 테이프가 있어서 바로 샀다!
꾸며보니 뽀짝하네~
가위같은 반듯하게 자를 수 있는걸 들고오지 않아서 약간 후회하긴했지만, 그래도 짱구라서 다 커버가 되네 흐흐
문제집에서 풀어보려고 한다.
음 처음에 문제 이해가 좀 어려웠는데, 아무래도 너무 빨리 읽고 이해하려고 했던 것 같다는 생각이 들었다.
그래서 여러줄 주석을 열어두고 하나하나 키워드를 빼서 정리해보니 더 빠르게 이해할 수 있었음.
문제를 요약하면,
works
원소들을 선택해서 뺀 값들이 최소 n
이상은 되어야 함.
그랬을 때 제곱해서 더한 값이 최소인 경우를 구하라.
숫자를 제곱하면 크기가 1차이더라도 급격하게 증가하므로
너무 큰 숫자가 없도록 하는 것이 이 문제의 솔루션이라 생각했다.
그래서, 가장 큰 숫자를 뽑은 뒤 그걸 1 감소시켜 다시 넣어두고, 다시 가장 큰 숫자를 뽑고 1을 빼고 넣고... 를 반복하면 되므로 PriorityQueue
를 사용하는 것이 최적이라 생각했다.
물론, Java
에서는 PQ
가 최소힙으로 구현되어 있으므로
Collections.reverseOrder()
를 넣어주어야 함을 기억하자.
완탐으로 BFS
를 선택해서 풀었다.
깊이를 가져가야 하므로 사용자 정의 클래스인 Node
를 선언해서 String
값과 depth
값을 담았음.
으아아 IDE 환경이 아니므로 어느 부분에서 실행이 불가한지 바로 찾을 수가 없어 어디서 잘못 적은 것인지 찾느라 시간이 좀 걸렸다.
구현 자체는 10분 내에 다 했는데
실수 했던 부분은 아래 두가지.
1. begin
이 words
에 있다면 방문 체크를 했는데, 없는 경우도 있으니 있을 때만 방문체크를 했어야 했다는 점.
2. 문자열의 길이와 words
배열의 크기를 담은 변수를 혼용.
이걸 빠른 시간 내에 풀 수 없었다니.. 아쉬움이 남는 문제다.
오늘 푼 두 문제가 생각보다 빨리 끝나서 한 문제 더 풀어보기로 했다. 근데 내가 접근을 이상하게 돌아간건지, 좀 생각해봐야 하는 문제가 맞는건지 30분이 지났음에도 안풀린다!
문제는 간단하다.
n
개의 숫자를 이용해서 합이 s
인 배열을 만드는데, 만들 수 있는 배열들 중 각 원소의 곱이 가장 큰 경우를 오름차순으로 정렬하여 return 하는 것.
생각한 솔루션은 아래와 같다.
s
가n
으로 나누어 떨어진다면 무조건s
를n
으로 나눈 수로만 구성된 배열을 리턴할 것.s
가n
보다 작다면n
개의 숫자로 합이s
인 배열을 만들 수 없다. 그러므로 -1만 넣어서 return.
위 둘은 틀렸다고 생각하지 않았고, s
가 n
으로 나누어 떨어지지 않는 경우에 대해 계산을 잘못한 것 같다 추측했음.
이런 경우엔.. 직감으로 이럴 것 같다? 가 오지않는다면 손수 완탐을 돌리는 것이 차라리 낫다.
그래서 새로운 테케를 임의로 설정해서 규칙을 파악해보고자 했음.
ex 1) n=4, s=10
result 배열 | 원소들을 곱한 값 |
---|---|
1,2,3,4 | 24 |
2,2,2,4 | 32 |
2,2,3,3 | 36 |
즉, 숫자가 널리 분포되어 있지 않다면 곱했을 때 상대적으로 큰 값이 나옴을 확인할 수 있었다. 물론 언제나 이럴 것임을 증명한 것은 아니고, dp처럼 규칙을 찾아보는 과정이라 생각하면 된다.
ex 2) n=6, s=21
result 배열 | 원소들을 곱한 값 |
---|---|
1,2,3,4,5,6 | 720 |
2,2,3,4,5,5 | 1200 |
2,3,3,3,5,5 | 1350 |
2,3,3,4,4,5 | 1440 |
3,3,3,4,4,4 | 1728 |
나는 이정도 구해보고 숫자 2개만 있었을 때 가장 큰 수가 나온다고 생각했다. 그리고 나온 두 숫자 중 작은 수가 s/n
값의 정수부 라고 결론지었음.
그걸 구현했는데 틀렸음을 얻었던 것..
그런데 방금 실수를 하나 발견해서 풀었다.
프로그래머스에 테케 추가해서 테스트 해볼껄..
답이 [2,2,2,3,3,3]이 나와야 하는데 [2,3,3,3]만 나오고 있던 것.
알고보니 else
분기 점에선 값을 안넣고 cur
값을 빼기만 했었다.
그걸 고쳐주니 Accept 흐으
다음부턴 테케 꼭 구한 거 추가하기.. 잊지말기..😢