문자열 다루기 기본

GOYENA·2025년 3월 27일

algorithm

목록 보기
11/12

문자열 다루기 기본

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

https://school.programmers.co.kr/learn/courses/30/lessons/12918

어떻게 코드 작성할 건지?
숫자인지 어떻게 확인하지??

막막해서 문제를 미뤄뒀던 때, 팀원분이 힌트를 주셨다.ㅎㅎ

"아스키코드"

문자열의 길이가 4 혹은 6이 아니라면 false를 리턴
if(s.length() != 4 && s.length() != 6){
return false;}
s는 문자열 ∴ char형태로 바꿔 한 글자씩 비교해 보기
만약 문자가 숫자(문자)라면 True, 아니라면 False 리턴
'숫자 0~9에 대응하는 아스키 코드랑 비교하면 되나?'

개념이 잘 이해되지 않아서 그냥 일단 코드 짜봤다.

작성하면서도 이해가 잘 안 됐다.

어떻게 char형태와 숫자를 비교할 수 있지??

컴파일 오류 나겠지?

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

어? 왜 안나지?ㅎㅎㅎㅎ머쓱..

계속 생각해봤다.

계속 생각해봐도 모르겠어서 GPT한테 물어봤다.
컴퓨터는 어떨 때 숫자로 인식하는지 어떨 때 문자로 인식하는지

int는 유니코드로 인코딩하는건지 뭔지...물어봤다ㅎㅎㅎ...

(개념을 이해하고보니 진짜 괴상한 질문이구나)

지피티의 답 : 정수는 인코딩이 필요 없는 숫자입니다.

아....그렇구나...ㅋㅋㅋㅋ맞다..유니코드표는 '문자'표지...ㅋㅋㅋ

이제 머릿속에 개념 확실히 박혔다...

문자코드 48은 숫자 0이고, 문자코드 57은 숫자 9이다.

이 개념으로 아래와 같이 바꿔서 코드를 작성할 수 도 있다.

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

문제를 통해 배운 점

컴파일 오류가 나지 않은 이유는?

숫자 모양을 가진 문자와 실제 숫자는 다르다.

숫자 모양을의 문자는 아스키 코드로 인코딩된 문자이고, 실제 숫자는 그냥 숫자이다.

'char'형 변수 'c'의 값은 문자 코드 48과 57(아스키 코드)를 비교한 것.

따라서 숫자와 비교한 것이 아니기 때문에ㅡ 컴파일 에러가 발생하지 않는다.

profile
헤헷

0개의 댓글