TIL(Today I Learned)

[Java/코딩테스트] 문자열 다루기 기본( + 아스키코드에 대하여)

yunseohhe 2024. 8. 23. 13:23

안녕하세요!

아스키코드에 확실하게 집어 넘어갈 수 있는 코딩테스트를 가지고 왔습니다.

 

 

 

 

일단, 문제를 겪은 코딩테스트입니다.

문제
초기화 상태

 

 

제가 생각하는 대로 코드를 작성해 보았습니다.

시도1

시도 1

설명

1. if문으로 문자열 길이가 4이거나 6일때만 for문을 시행해주도록 합니다.

2. chaArr배열의 값을 꺼내 비교해서 0과 9사이에 값이 맞으면 'true'를 반환해주도록 했습니다.

    (→ 추후 이 부분이 문제였습니다,,,!

          why?? 그냥 0은 int형 0과 똑같고, char형 '1'은 int형 49입니다. 그래서 위에 코드는 잘못된 것입니다.)

 

 

시도1의 문제점

1. 문자열 길이를 걸러주는 if문이 너무 장황함

     →  해결 : != 논리연산자를 사용하여 if문을 간단하게 바꿔주었습니다.

2. 아스키코드 개념을 인지하지 못하고 있었음

     →  해결 : 아스키코드 개념에 대해 다시 고 넘어간후,  코드를 다시 작성하였습니다.

(밑에 아스키코드에 대해 추가적인 설명을 붙여놓았습니다.)

 

 

시도2

시도 2

설명

1. 3번째 선언하였던 answer를 지우고, return으로 간단하게 해줬습니다.

2. 문자열의 길이가 4 와 6이 아니면 바로 'fasle'를 return 해줍니다.

3. for문안에 if문으로 문자열이 숫자로만 구성되어있는지 판단해줍니다.

  → '0' = int 48 이고, '9' = int 57 입니다.

 

그런데 이번에는 테스트는 통과됐는데, 제출하니깐 중간중간 실패가 뜨더군요,,

시도2 결과

 

 

시도2의 문제점

1. for문안에서 바로 retrun해버리니깐 문자열 중간에 문자가 껴있는 경우에도 true가 나와버리게 된다.

    →  해결 : if문을 &&가 아닌 || 연산자로 바꾼다 ( chaArr[i] < '0' || charArr[i] > '9' )

 

 

 

시도3

해결 1

설명

1. || 논리 연산자로 바꾸면서 if문으로 false 값을 걸러줬기 때문에 어차피 나머지는 true가 나옵니다. 그래서 else문을 아예 지웠습니다.

   →  제한사항 보면 문자열은 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다. 이렇게 적혀있습니다.

 

 

 

 

아스키코드

출처 : 구글이미지

 

예시)

 - char의 문자가 '0' 인경우 int형 48이고, 그냥 0으로 적어놓으면 int형 0입니다.

 

 

 

 


오늘의 요약

아스키코드의 char형에 대해 알아두자.