자바 solution 함수 - jaba solution hamsu

문제설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.


Java Code

class Solution {
    public boolean solution(String s) {
        if(s.length() != 4 && s.length() != 6) return false;
        for (int i=0;i<s.length();i++) {
            if (s.charAt(i) < '0' || s.charAt(i) > '9') return false;
        }        
        return true;
    }
}

📌 캬 ..

기본적인 문제이지만 다른 사람의 풀이를 보다가 너무 기똥찬 방법이 있어 기억하기 위해 글을 남깁니다..

아직 알고리즘 초보이기 때문에 이런 풀이 방식이 너무 신박하게 다가오네요..

사실 이 문제를 풀기 전에 한 번은 생각한 방법입니다.

문자열을 통으로 정수로 바꾸고 예외가 터지면 false ?!

하지만 풀이로 적용하지는 못했는데 정말 이렇게 푸신 분이 계셨네요..

감사히 배우고 갑니다 ㅎ 😁

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;
  }
}

RATSENO

DEV/코딩테스트 문제풀기

[JAVA]프로그래머스(level1) - 문자열 다루기 기본

RATSENO 2019. 12. 23. 15:14

문제설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 a234이면 False를 리턴하고 1234라면 True를 리턴하면 됩니다.


제한사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

문제풀이

class Solution {
	public boolean solution(String s) {
		boolean answer = true;
		
		int length = s.length();
		if(length != 4 && length != 6) {
			return false;
		}
		for(int i=0; i<length; i++) {
			char c = s.charAt(i);
			if(c<'0' || c>'9') {
				return false;
			}
		}
		return answer;
	}
}

문자열 다루기 기본

문제 설명

문자열 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 )

다른사람의 풀이

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이 발생한다는 사실을 인지하고 있어야 가능했던 풀이방법 같습니다. ^^

import java.util.*;

class Solution {

public boolean solution(String s) {

if (s.length() == 4 || s.length() == 6return 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가 나오는 것으로 보아 숫자와 문자데이터를 구분해주는 메소드같습니다. 

★★★

알고리즘을 하면서 다른사람의 풀이를 보고 확실하게 더 얻어가는 부분이 이런거라고 생각합니다. 자기만의 풀이만 풀고 땡!! 치는 것이 아닌 다른사람은 어떻게 문제를 해결했는지를 통찰하고 저 자신도 다음의 알고리즘을 풀때 한층 더 새로운 방법에 대해서 경험을 한다는 것이 알고리즘을 공부하면서 좋은 점이라고 생각합니다.