오늘의 학습 키워드
https://school.programmers.co.kr/learn/courses/30/lessons/147355
- 크기가 작은 부분 문자열
- CS, 컴퓨터 구조 학습
공부한 내용 본인의 언어로 정리하기
문자답안
class Solution {
public int solution(String t, String p) {
int answer = 0;
int plength = p.length();
long pLong = Long.parseLong(p);
for(int i = 0; i < t.length(); i++) {
if(i + plength > t.length()) {
break;
}
long chkLong = Long.parseLong(t.substring(i, i + plength));
if(chkLong <= pLong) {
answer++;
}
}
return answer;
}
}
해당 문제는 주어진 문자열 t에서 문자열 p의 길이와 같은 문자열을 만들 수 있는 경우의 수 중 문자열 p가 나타내는 수보다 작거나 같은 횟수를 구해야 한다.
그렇기 때문에 문자열 t에서 부분문자열을 구하는 방법을 찾는 것이 중요하다. 문자열 t의 길이만큼 반복문을 돌려 첫 인덱스부터 문자열 p의 길이만큼 잘라 구하는 방식을 선택하였다. 문자열을 자르는 `substring()`은 해당 인덱스가 없을 경우 예외를 발생시킨다. 인덱스 i와 문자열 p의 길이를 구한 수(substring의 end 값)가 문자열 t보다 크면 더 이상 부분문자열을 만들 수 없는 것이기 때문에 해당 조건을 추가하였다.
해당 조건을 통과하는 인덱스는 부분 문자열을 만들 수 있는 것이기 때문에 정수형(Long)형으로 변환하여 조건에 맞으면 카운터(answer)를 추가하였다.
문제풀이 중 이슈
해당 코드를 보면 long형으로 조건을 비교하였다. 처음에는 int 형 비교하였는데 실패케이스가 발생하였다. 문제의 조건을 확인해 보면 1 ≤ p의 길이 ≤ 18로 p의 길이가 18자리까지 가능하며 이걸 정수형 표현이 18 자릿수까지 가능하다는 것을 알 수 있다. int형은 10자리 수까지만 제공하기 때문에 이 경우 long형을 사용해서 비교해야 한다. (조건을 확인하여 올바른 자료형 사용을 고려하자.)
그리고 반복문을 전체반복하고 안에 조건절을 추가하는 방식으로 했는데 다음과 같이 하면 조건전 없이 간단하게 해결가능했다.
반복문의 조건을 개선: i + plength가 t.length()를 넘는 경우 반복문을 종료하는 조건을 for 문에서 설정할 수 있다.
for (int i = 0; i <= t.length() - pLength; i++) {
...
}
오늘의 회고
첫날과 동일하게 문자열관련 문제였다. 간단한 문제였지만 문제의 조건등을 제대로 파악하지 않는다면 이슈를 찾기 힘들 수도 있는 문제였다. 그리고 다른 사람의 문제답안을 보고 코드를 최적화할 수 있는 방법을 알 수 있어 앞으로도 다른 사람의 답안도 확인해야 될 것 같다.
그 외에도 금일 컴퓨터 구조 2장 명령어 부분을 정리하였다. 아무래도 컴퓨터구조는 면접 질문등에선 비중이 떨어진다. 그렇다보니 집중력이 떨어져 진도가 생각보다 나가지 않는다. 마음을 다잡고 빨리 컴퓨터구조를 마무리 짓는 것을 목표로 해야 될 것 같다.
2024.10.28 - [Knowledge/컴퓨터구조&운영체제] - [컴퓨터구조] 컴퓨터가 이해하는 정보 - 명령어
'TIL' 카테고리의 다른 글
[TIL-24/11/02] 99클럽 코테 스터디 6일차 TIL - 할리갈리 (1) | 2024.11.02 |
---|---|
[TIL-24/11/01] 99클럽 코테 스터디 5일차 TIL - 모스 부호 (0) | 2024.11.01 |
[TIL-24/10/31] 99클럽 코테 스터디 4일차 TIL + 숫자 문자열과 영단어, CS 학습 (1) | 2024.10.31 |
[TIL-24/10/30] 99클럽 코테 스터디 3일차 TIL + 문자열 나누기, CS 학습 (0) | 2024.10.30 |
[TIL-24/10/28] 99클럽 코테 스터디 1일차 TIL + 문자열 내 p와 y의 개수, CS 학습 (1) | 2024.10.28 |