[TIL_2024.05.08.] 23번째 기록

Daily-Log·2024년 5월 8일
0

회고

목록 보기
23/26
post-thumbnail

어제 병원을 다녀왔는데 상태가 많이 호전되고 있어 한 약의 용량을 200mg에서 150mg으로 줄이기로 했다! 또한, 피검사로 몸 상태를 볼 때가 되어서 체혈도 하고 왔지.

으으 너무 좋다ㅜㅜ 호전이라니.. 이게 얼마나 오랜만에 듣는 소식인가😆

건강식으로 더 빠르게 나아지고 싶어 집에 남은 재료가 있는지 생각해봤는데 오늘 아침에 다 썼네. 그래서 근처 이마트에서 한번 장을 보면서 생야채들을 건졌다.

요새 애용하는 고등어도 더 사고 벌집 삼겹살에 쌈 채소, 그리고 ABC쥬스의 해독효과도 보고자 당근과 비트도 골라준 뒤 나머지 채소들은 990원의 행복 코너에서 여러 종류를 골라담았다.

그러곤 집으로 돌아와 만들어둔 김치전 반죽을 굽고 삼겹살도 알맞은 마이야르 반응이 되도록 구워준 뒤 쌈채소 함께 저녁으로 먹었다.

앞으로도 건강식으로 꾸준히 챙겨먹어야지 응응




오늘의 할 일은

다이소에 짱구 마스킹 테이프가 있어서 바로 샀다!

꾸며보니 뽀짝하네~
가위같은 반듯하게 자를 수 있는걸 들고오지 않아서 약간 후회하긴했지만, 그래도 짱구라서 다 커버가 되네 흐흐




PCCP 대비 PS 2문제 이상 풀기

문제집에서 풀어보려고 한다.


문제 1) 야근 지수

음 처음에 문제 이해가 좀 어려웠는데, 아무래도 너무 빨리 읽고 이해하려고 했던 것 같다는 생각이 들었다.

그래서 여러줄 주석을 열어두고 하나하나 키워드를 빼서 정리해보니 더 빠르게 이해할 수 있었음.

문제를 요약하면,
works원소들을 선택해서 뺀 값들이 최소 n이상은 되어야 함.
그랬을 때 제곱해서 더한 값이 최소인 경우를 구하라.

숫자를 제곱하면 크기가 1차이더라도 급격하게 증가하므로
너무 큰 숫자가 없도록 하는 것이 이 문제의 솔루션이라 생각했다.

그래서, 가장 큰 숫자를 뽑은 뒤 그걸 1 감소시켜 다시 넣어두고, 다시 가장 큰 숫자를 뽑고 1을 빼고 넣고... 를 반복하면 되므로 PriorityQueue를 사용하는 것이 최적이라 생각했다.

물론, Java에서는 PQ가 최소힙으로 구현되어 있으므로
Collections.reverseOrder()를 넣어주어야 함을 기억하자.


문제 2) 단어 변환

완탐으로 BFS를 선택해서 풀었다.
깊이를 가져가야 하므로 사용자 정의 클래스인 Node를 선언해서 String 값과 depth값을 담았음.

으아아 IDE 환경이 아니므로 어느 부분에서 실행이 불가한지 바로 찾을 수가 없어 어디서 잘못 적은 것인지 찾느라 시간이 좀 걸렸다.

구현 자체는 10분 내에 다 했는데

실수 했던 부분은 아래 두가지.
1. beginwords에 있다면 방문 체크를 했는데, 없는 경우도 있으니 있을 때만 방문체크를 했어야 했다는 점.
2. 문자열의 길이와 words 배열의 크기를 담은 변수를 혼용.

이걸 빠른 시간 내에 풀 수 없었다니.. 아쉬움이 남는 문제다.




문제 3) 최고의 집합

오늘 푼 두 문제가 생각보다 빨리 끝나서 한 문제 더 풀어보기로 했다. 근데 내가 접근을 이상하게 돌아간건지, 좀 생각해봐야 하는 문제가 맞는건지 30분이 지났음에도 안풀린다!

문제는 간단하다.
n개의 숫자를 이용해서 합이 s인 배열을 만드는데, 만들 수 있는 배열들 중 각 원소의 곱이 가장 큰 경우를 오름차순으로 정렬하여 return 하는 것.


생각한 솔루션은 아래와 같다.

  1. sn으로 나누어 떨어진다면 무조건 sn으로 나눈 수로만 구성된 배열을 리턴할 것.
  2. sn보다 작다면 n개의 숫자로 합이 s인 배열을 만들 수 없다. 그러므로 -1만 넣어서 return.

위 둘은 틀렸다고 생각하지 않았고, sn으로 나누어 떨어지지 않는 경우에 대해 계산을 잘못한 것 같다 추측했음.


이런 경우엔.. 직감으로 이럴 것 같다? 가 오지않는다면 손수 완탐을 돌리는 것이 차라리 낫다.

그래서 새로운 테케를 임의로 설정해서 규칙을 파악해보고자 했음.


ex 1) n=4, s=10

result 배열원소들을 곱한 값
1,2,3,424
2,2,2,432
2,2,3,336

즉, 숫자가 널리 분포되어 있지 않다면 곱했을 때 상대적으로 큰 값이 나옴을 확인할 수 있었다. 물론 언제나 이럴 것임을 증명한 것은 아니고, dp처럼 규칙을 찾아보는 과정이라 생각하면 된다.


ex 2) n=6, s=21

result 배열원소들을 곱한 값
1,2,3,4,5,6720
2,2,3,4,5,51200
2,3,3,3,5,51350
2,3,3,4,4,51440
3,3,3,4,4,41728

나는 이정도 구해보고 숫자 2개만 있었을 때 가장 큰 수가 나온다고 생각했다. 그리고 나온 두 숫자 중 작은 수가 s/n 값의 정수부 라고 결론지었음.


그걸 구현했는데 틀렸음을 얻었던 것..

그런데 방금 실수를 하나 발견해서 풀었다.

프로그래머스에 테케 추가해서 테스트 해볼껄..
답이 [2,2,2,3,3,3]이 나와야 하는데 [2,3,3,3]만 나오고 있던 것.

알고보니 else 분기 점에선 값을 안넣고 cur값을 빼기만 했었다.
그걸 고쳐주니 Accept 흐으

다음부턴 테케 꼭 구한 거 추가하기.. 잊지말기..😢




이번주 일요일 정처기 시험 대비




이것이 자바다;




스프링 자바편;



profile
대충 뭐든 먹어요

0개의 댓글

관련 채용 정보