[Java] 자바 알고리즘, "문자열 다루기 기본"
- 알고리즘 문제/[Java] 알고리즘
- 2019. 2. 6. 19:21
문자열 다루기 기본
문제 설명
문자열 s의 길이가 4혹은 6이고, 숫자로만 구성되있는지 확인해주는 함수, solution을 완성하세요.
예를들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.
제한 사항
s는 길이 1 이상, 길이 8 이하인 문자열입니다.
입출력 예
s |
return |
a234 |
false |
1234 |
true |
나의 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Solution { public boolean solution(String s) { boolean answer = true; char[] temp = s.toCharArray(); if(temp.length!=4 && temp.length!=6){ return false; } for(int i =0; i<temp.length; i++) { if(!(temp[i] >='0' && temp[i] <='9')) { answer = false; return answer; } } return answer; } } | cs |
일단 길이가 4나 6이 아닌경우 바로 false를 리턴하게 하였습니다. 그리고 for문을 돌면서 문자코드값이 '0' ~ '9' (숫자의 문자코드) 범위내에 있지 않으면 문자로 판단하고 false를 리턴하게 했습니다. 이 과정을 모두 통과한 문자열 s만이 true를 리턴할 수 있습니다.
포인트는 문자코드 '0' ~ '9' 값이 모두 일련의 문자코드로 나타난다는 것입니다.( 예, 0 : 48, 1 : 49, ... 9 : 57 )
다른사람의 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public boolean solution(String s) { if(s.length() == 4 || s.length() == 6){ try{ int x = Integer.parseInt(s); return true; } catch(NumberFormatException e){ return false; } } else return false; } } | cs |
이 분은 try catch 문을 써서 해결하신 모습입니다. parseInt해서 예외가 발생하면 return문으로 이어지도록 하신것 같습니다. 이 부분을 소화하려면 Integer.parseInt()안의 매개변수로 들어가는 값에 문자열이 있으면 NumberFormatException이 발생한다는 사실을 인지하고 있어야 가능했던 풀이방법 같습니다. ^^
1 2 3 4 5 6 7 8 | import java.util.*; class Solution { public boolean solution(String s) { if (s.length() == 4 || s.length() == 6) return s.matches("(^[0-9]*$)"); return false; } } | cs |
이 분은 정규표현식을 이용해서 해결하신 모습입니다. matches의 매개변수로 정규표현식을 넣으면 문자열 s 가 매개변수정규표현식에 부합되는 값이라면 true를, 아니면 false를 반환하는 메소드인 것 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Solution { public boolean solution(String s) { boolean answer = false; if(s.length() == 4 || s.length() == 6 ){ int i; for(i=0;i<s.length();i++){ if(!Character.isDigit(s.charAt(i))){ break; } } if(i==s.length()){ answer =true; } } return answer; } } | cs |
저는 이부분에 대해서 잘 몰랐는데 Character 클래스에 isDigit()이라는 메소드가 내장되어있더라구요. 안에 '1' 을 넣으면 true, 'a' 를 넣으면 false가 나오는 것으로 보아 숫자와 문자데이터를 구분해주는 메소드같습니다.
★★★
알고리즘을 하면서 다른사람의 풀이를 보고 확실하게 더 얻어가는 부분이 이런거라고 생각합니다. 자기만의 풀이만 풀고 땡!! 치는 것이 아닌 다른사람은 어떻게 문제를 해결했는지를 통찰하고 저 자신도 다음의 알고리즘을 풀때 한층 더 새로운 방법에 대해서 경험을 한다는 것이 알고리즘을 공부하면서 좋은 점이라고 생각합니다.
'알고리즘 문제 > [Java] 알고리즘' 카테고리의 다른 글
[Java] 알고리즘, "서울에서 김서방 찾기" (0) | 2019.02.09 |
---|---|
[Java] 알고리즘, "수박수박수박수박수?" (2) | 2019.02.07 |
[Java] 자바 알고리즘, "문자열 내 p와 y의 개수" (0) | 2019.02.06 |
[Java] 자바 알고리즘, "두 정수 사이의 합" (0) | 2019.02.06 |
[Java] 알고리즘, "나누어 떨어지는 숫자 배열" (0) | 2019.02.03 |