728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/12918
⭐️ 코드
방법 1
class Solution {
public boolean solution(String s) {
boolean answer = true;
if(s.length() == 4 || s.length() == 6) {
for(int i = 0; i<s.length(); i++) {
char c = s.charAt(i);
if(c<'0' || c>'9') {
return false;
}
}
answer = true;
} else {
return false;
}
return answer;
}
}
방법 2 (method 활용)
public class P_9 {
public boolean solution(String s) {
boolean answer = true;
answer = length_Cnt(s);
if(answer == true) {
answer = is_Num(s);
}
return answer;
}
public boolean length_Cnt(String s) {
if(s.length() < 4 || s.length() > 6) {
return false;
} else {
return true;
}
}
public boolean is_Num(String s) {
for(int i = 0; i<s.length(); i++) {
char c = s.charAt(i);
if(c < '0' || c > '9') {
return false;
}
}
return true;
}
💡 문제 풀이
- 조건에서 길이를 먼저 체크할지 문자를 먼저 체크할지는 하기 나름이지만 길이를 먼저 검사하는 것이 불필요한 반복을 줄일 수 있다고 생각된다.
for(int i = 0; i<s.length(); i++) {
char c = s.charAt(i);
if(c<'0' || c>'9') {
return false;
}
}
- for문을 통해 문자열 s의 각 index에 해당하는 char 문자를 가져온다.
- if문을 통해 문자 c의 크기를 비교하게 되는데 'char c = s.charAt(i)'는 문자열에서 하나의 문자를 추출했기 때문에 c의 출력값이 0이더라도 그건 숫자(int)가 아니라 문자(char) 임을 꼭 알아두자.
- Java에서 문자는 간단하게 '<' 와 '>'를 사용하여 대소 비교를 할 수 있는데 Ascii 코드 값으로 비교가 된다.
- 위의 Ascii 코드 표를 참고해보면 문자 0에 대한 값은 48이다. 가끔 여러분들이 흔히 보는 c - '0' 같은 코드는 아스키코드 값인 0을 빼서 int형 숫자로 만들어 우리가 익히 알고 있는 정수형으로 표현하는 것이다.
- 따라서 위의 if문의 대소 비교도 결국 숫자만을 찾기 위함이므로 '48 > c < 57' 형식으로 진행되는 것이다.
👀 후기
- 다시 풀어보는 중인데 하나하나 알아가는 재미가 있다.
- String 문자열과 Char 문자에 대한 자바 관련 코드는 정말 많은데 왜 그렇게 변환되고, 비교를 위해 여러 작업을 거치는지에 관해서 알아가야 할게 많다 ㅎㅎ..
- 어렵지만 차근차근 해보자!! 파이팅!
728x90
반응형
'CodingTest > Programmers' 카테고리의 다른 글
[프로그래머스/Programmers] [1차] 비밀지도 (Java - BinaryString) (0) | 2023.01.06 |
---|---|
[프로그래머스/Programmers] 예산 (Java - 알고리즘) (0) | 2023.01.04 |
[프로그래머스/Programmers] 최대공약수와 최소공배수 (Java - 수학) (0) | 2023.01.03 |
[프로그래머스/Programmers] 신고 결과 받기 (Java - HashMap) (0) | 2022.12.21 |
[프로그래머스/Programmers] 햄버거 만들기 (Java - List) (0) | 2022.12.20 |