문제 설명
문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요.
예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
제한사항
- s는 길이 1 이상, 길이 8 이하인 문자열입니다.
- s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.
입출력 예
s | return |
"a234" | false |
"1234" | true |
⭕ 풀이1
class Solution {
public boolean solution(String str) {
if(str.length()==4||str.length()==6) {
try{
Integer.parseInt(str);
return true;
}catch(NumberFormatException nfe) {
return false;
}
}else {
return false;
}
}
}
✅ 흐름1
우선 입력받은 문자열의 길이를 확인한 뒤
길이가 조건에 맞다면 문자열을 정수타입으로 형변환시키기 위해
Integer.parseInt 메서드를 사용했다.
이때 정수형으로 형변환에 실패할경우 발생하는 예외
NumberFormatException 을
try catch로 잡도록 만들고
만약 해당 예외클래스가 잡혔다면(형변환에 실패했다면)
false를 반환하도록 작성하였다.
⭕ 풀이2
class Solution {
public boolean solution(String str) {
boolean result = true;
char[] arr = str.toCharArray();
if(str.length()==4||str.length()==6) {
for(int i=0;i<arr.length;i++) {
if(!(47<arr[i]&&arr[i]<58)) {
result = false;
break;
}
}
}else {
result = false;
}
return result;
}
}
✅ 흐름2
입력받은 문자열을 toCharArray를 사용해 char배열로 만든다.
문자열의 길이가 조건에 부합할경우
배열의 각 원소가 숫자가 맞는지 아스키코드로 식별한다
아스키코드에서 숫자 0~9 는 48~57 이므로
해당조건에 만족하지않는다면 result를 false로 바꾼뒤
반복문을 빠져나오도록 작성했다.
사실 풀이1의 코드로 작성하면서 문자열다루기라는 제목에 맞나? 싶은 생각이 들었지만
예외처리로 해결해도 풀어지나 하고 제출해봤는데 다행히? 다른분들도 풀이1의 방식을 사용하여 해결하셨다.
그래도 왠지모를 찜찜함때문일까 문자열 하나하나를 비교하여 풀이하는 방식으로 코드를 다시 작성해보았다.
-출처
https://school.programmers.co.kr/learn/courses/30/lessons/12918
'Algorithm > Programmers(Java)' 카테고리의 다른 글
[프로그래머스/Lv.1] 행렬의 덧셈 (0) | 2022.12.22 |
---|---|
[프로그래머스/Lv.1] 부족한 금액 계산하기 (0) | 2022.12.22 |
[프로그래머스/Lv.1] 약수의 개수와 덧셈 (0) | 2022.12.21 |
[프로그래머스/Lv.1] 문자열 내림차순으로 배치하기 (0) | 2022.12.20 |
[프로그래머스/Lv.1] 내적 (0) | 2022.12.20 |