금일의 풀이 전반에 걸쳐서 오타에 관한 이슈가 많이 발생했다. 그로 인해 불필요한 과정이 많았다. 오류가 발생하면 오타를 먼저 확인해야겠다.
오전 3시간을 잡아먹은 문제이다. 검증 로직을 구현하는 과정에서 시행착오가 많이 발생했다. 코드는 다음과 같다.
public int solution(int[] ingredient) {
int answer = 0;
Stack<Integer> ingredi = new Stack<>(); // 재료를 받아올 Stack
Stack<Integer> supervise = new Stack<>(); // 재료 순서를 검증할 Stack
int[] hamburger = {1, 3, 2, 1}; // 햄버거를 완성하기 위한 재료의 순서
for (int make : ingredient) { // 재료를 받아옴
ingredi.push(make);
if (ingredi.size() >= 4 && ingredi.peek() == hamburger[0]) { // 검증하기 위한 조건
boolean success = true; // 재료 검증 결과 태그
for (int j : hamburger) { // 재료 검증 실패 조건
if (j != ingredi.peek()) {
success = false;
break;
}
supervise.push(ingredi.pop()); // 각 재료의 검증 완료 시
}
if (success) { // 모든 재료의 검증 완료 시
answer++;
supervise.clear();
} else {
while (!supervise.isEmpty()) { // 재료 검증 실패시 공정과정
ingredi.push(supervise.pop());
}
}
}
}
return answer;
}
문제들 대부분이 반복문의 영역 안에서 벌어지고 있다. 반복문에 대한 이해도 부족 혹은 서른안이 문제의 원인이라고 생각한다. 전자는 반복문을 첨삭할 때 느리더라도 꼼꼼하게 읽어나가는 연습을 해야겠다. 후자는 현재로서는 루테인 밖에 해답이 없다.
public int solution(String s) {
return Integer.parseInt(String.valueOf(s));
}
딱히 어려울 것 없는 문제였지만, 다른 사람의 풀이를 확인하던 도중에 '알고리즘 문제인데 못 풀어서 함수를 사용했다 ㅠㅠㅠ' 이런 뉘앙스의 댓글을 봤다.
그것을 보고 뭐가 잘못된 것인지 모르겠다. 결국 문제를 빠르고 간결하게 해결하기 위한 연습이 알고리즘 문제의 목적이고 그에 부합한 코드를 작성하고도 반성하고 있었다. 필자가 모르는 무언가 더 있는 것인가 싶다.
하지만 지금의 필자가 생각하는 알고리즘의 문제의 목적은 '빠르고 간결하게 해결하기 위한 좋은 코드를 짜는 것'이라고 생각한다.
발견하기 까다로운 반례를 가지고 있었던 문제이다. 또한 지금까지 필자가 long 과 float 을 동일시하고 있던 잘못을 바로잡은 문제이다.
필자는 long 타입이 소수점을 가지는 타입이라고 알고 있었다. 아찔하다. 하여 오류를 품은 초기의 식을 구현했다.
// 오류를 품은 식
long root = (long) Math.sqrt(n)+1;
return n/root == root? (long) Math.pow(root + 1, 2) : -1;
public long solution(long n) {
long root = (long) Math.sqrt(n);
return Math.sqrt(n)%1 == 0 ? (long) Math.pow(root + 1, 2) : -1;
// 위의 삼항연산자는 아래와 같은 의미이다.
// if (Math.sqrt(n) % 1 == 0) {
// return = (long) Math.pow(root+1, 2);
// } else {
// return -1;
// }
}
[TIL#28] Study] 코딩 테스트 11 (0) | 2023.12.29 |
---|---|
[TIL#26] Study] 코딩 테스트 10 (1) | 2023.12.21 |
[TIL#19] Study] 코딩 테스트 8 (1) | 2023.11.12 |
[TIL#18] Study] 코딩 테스트 7 (0) | 2023.11.10 |
[TIL#18] Study] 코딩 테스트 6 (0) | 2023.11.09 |