매일 매일 하루 한 문제씩.
꾸준히 이어가는 코딩테스트 풀이 기록 ✅
오늘 푼 문제는 '최소직사각형'
아... 꽤 쉽다고 생각했던 문제인데 결론적으론 내 힘으로 제대로 풀지 않아서 영 맘에 안드는 하루. 뭐 이런날도 있지! 하고 빨리 털어내야 하긴 하는데. 그래도 괜시리 이런 날이면 마음이 폭 꺾이는 느낌이다.
어쨌든. 간만에 min, max를 활용하는 풀이를 확인했고, 또 자바스크립트의 reduce가 누적 더하기가 아닌 다른 방법으로도 활용 가능하다는 점을 알긴 했다.
프론트에서 자바스크립트 활용은 필수 중 필수일텐데. 특히 reduce는 계속 사용해보면서 활용법을 익혀야겠다. 누적더하기 말고도 이런 문제에 활용할 거라곤 생각도 못했음 ㄴㅇㄱ 상상도 못한 정체.
사실 원래 풀려고 했던 방향성은 배열을 순회하면서 가장 긴 높이, 너비를 구한다음에 가장 긴 너비가 포함된 배열의 높이, 가장 긴 높이가 포함된 배열의 너비를 또다시 비교하면서 각각의 최대값을 찾아내려고 했다.
근데 하면서도 계속 확신이 없어 시간을 꽤 쓰다가 결국 다른 풀이를 보게 되었는데, max, min으로 해결이 되는 부분이었다.
class Solution {
public int solution(int[][] sizes) {
int width = 0, height = 0;
for (int[] card : sizes) {
width = Math.max(width, Math.max(card[0], card[1]));
height = Math.max(height, Math.min(card[0], card[1]));
}
return width * height;
}
}
자바스크립트 역시 자바와 크게 다르지 않은 방향성으로 문제를 풀었는데,
나중에 다른 풀이들을 살펴보면서 더 나은 방법들이 있다는 점을 알게됐다.
요즘 최대한 for문을 사용하지 않고, 우선은 immutable하게 풀려고 계속 노력중인데, 아무래도 map, reduce 등의 배열 메서드를 더 확장해서 알아야겠다는 생각이 들었다.
자바스크립트도 너무 어렵게 느껴지는 구간은 조금 지났기 떄문에 코어자바스크립트랑 자바 코딩의 기술 책 병행하며 다시 읽어야겠다고 다짐한 하루... 코어자바스크립트 책 왔으니 오늘부터 읽자. 하..ㅎㅎ.
function solution(sizes) {
const max = sizes.map((value) => Math.max(value[0], value[1]));
const min = sizes.map((value) => Math.min(value[0], value[1]));
const width = max.sort((a, b) => b - a)[0];
const height = min.sort((a, b) => b - a)[0];
return width * height;
}
쯥.. ㅠㅠ.
여러모로 아쉬운 오늘의 코딩도장.
아쉬운 부분 2가지를 짚어보자면, 먼저 2차원배열이 나올 때 또다시 '띠용' 하는 마음으로 제대로 풀지 못한 점. 2차원 배열이라고 해봐야 오늘 문제같은 경우 정말 정형화되어 있는 2차원 배열이어서 자바에서도 그리 헷갈일 게 없었는데 그냥 체감난이도가 높았던 것 같다. 자바스크립트에서는 더더욱 문제가 되지 않고...
두번째론 논리 파악이 늦었다는 점.
max, min으로 해결할 수 있는 부분을 너무 많은 경우의 수와 for문으로만 해결하려 하니 쉽게 풀어지지 않았다. 또 풀 수 있었음에도 불구하고 괜한 불안감에 더 나아가지 못한 점.
물론 정해진 시간 내에 풀어야 하는 것도 맞고, 너무 시간을 무한대로 늘여서도 안되지만 그래도 한 번 풀어보는 경험과 유익이 주는게 분명히 있을텐데...
오늘은 그 밸런스를 잘 맞춰낼거란 확신을 가지지 못하고 중간에 포기한 느낌이기도 하다.
어찌됐건!! 오늘 느낀점을 반성점으로 삼아 내일은 끝까지 잘 풀어내보자. 화이팅!