1.데일리 문제풀이
Java: 부분문자열 잘라 크기가 작은 횟수 세기
class Solution {
public int solution(String t, String p) {
final int T_LANGTH = t.length();
final int P_LANGTH = p.length();
int answer = 0;
for (int i = 0; i < T_LANGTH - P_LANGTH + 1; i++) {
if (t.substring(i, i + P_LANGTH).compareTo(p) <= 0) {
answer++;
}
}
return answer;
}
}
부분문자열에서 사전식 비교로 속도를 조절하려고 해 보았다.
두 문자열의 길이가 같을 때, compareTo() 메소드를 사용하여 사전식으로 비교할 수 있다. 이는 두 문자열을 한 문자씩 비교하여 결정된다.
class Solution {
public int solution(String t, String p) {
int answer = 0;
for (int i = 0; i < t.length()-p.length()+1; i++){
if (Long.parseLong(t.substring(i,i+)) <= Long.parseLong(p)){
answer++;
}
}
return answer;
}
}
Long으로 캐스팅해 비교하는 방법도 있다. Long인 이유는 자를 수 있는 길이가 1부터 18까지이기 때문이다. 일부러 이런 부분을 의도해서 낸 것 같다.
길이가 맞지 않으면 parseInt 단계에서 NumberFormatException을 던져준다.
2.강의: 예외 및 예외처리
pocu 아카데미 Java강의에서 예전에 건너 뛰었던 예외를 다시 보았다.
Calculator 부분에서 헷갈렸던 문제를 개념을 정리해서 짚어주고 있는 걸 느꼈다.
버그(프로그래머가 예상하지 못한 상황)와 오류(프로그래머가 예상가능한 상황)를 개념적으로 구분하고,
이에 따라 처리 방법을 4개로 유형화(1.무시, 2.종료, 3.수정, 4.예외처리)를 하였다.
그러나 유형에 맞는 적절한 해결 방법까지 유형화하긴 어렵고, 개념과 문제를 쌓아가며 고민해야 한다는 점을 알았다.
예외처리를 흐름제어에 쓰지 말라고 했는데 이 부분에서 드끔했다. Calculator 예제에서 정확하게 while안에 흐름제어를 위해서 try-catch를 하고 있기 때문.
그러나 동시에 parseInt같은 부분은 예외를 받아서 판단할 수 밖에 없다고 해서, 정확히 내 상황과 같다는 생각을 했다.
또한 이 예시 덕분에 String과 regex 처리가 효용성 있을 수 있음을 알았다. String으로 일관되게 받은 다음, regex 구문으로 프로그래머가 입력 처리를 예외처리가 아닌 방식으로 제어할 수 있기 때문이다.
'(2024-10) 스파르타 내일배움캠프 - 백엔드 > TIL' 카테고리의 다른 글
(2024-11-20) TIL (1) | 2024.11.20 |
---|---|
(2024-11-19) TIL: HasNext()와 정규표현식 (1) | 2024.11.19 |
(2024-11-15) TIL (1) | 2024.11.15 |
(2024-11-14) TIL (0) | 2024.11.14 |
(2024-11-13) TIL (2) | 2024.11.13 |