[프로그래머스]Level 1 : 문자열을 정수로 바꾸기(JAVA)

2021. 5. 18. 01:12·코딩 테스트/Java
반응형
문자열을 정수로 바꾸기
문제 설명

문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한 조건

  • s의 길이는 1 이상 5 이하입니다.
  • s의 맨 앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져 있습니다.
  • s는 "0"으로 시작하지 않습니다.
입출력 예

예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

코드
class Solution {
    public int solution(String s) {
        int answer = 0;
        boolean sign = true;
        char c = ' ';
        
        for(int i=0; i<s.length(); i++){
            c = s.charAt(i);
            if(c == '-'){
                sign = false;
            }else if(c != '+'){            
                answer = answer * 10 + (c - '0');
            }           
        }
        return sign? answer : -1 * answer;
    }
}
해설

제 코드를 보시고, 대부분 사람들이 왜 이렇게 어렵게 했지?라고 생각이 드실 겁니다.

class Solution {
    public int solution(String s) {
        return Integer.parseInt(s);
    }
}

물론 int형 형 변환을 Integer.parseInt(s); 혹은 Integer.valueOf(s); 를 사용하면 이렇게 한 줄로 끝나는 문제입니다..

 

 

저는 개인적으로 알고리즘적으로 한번 접근을 해서 풀어보았습니다.

boolean sign을 통해서 '+', '-'를 구분합니다.

 

첫 번째 문자가 '-'인 경우 sign을 false로 변경합니다.

else if( c!= '+') 두 번째 문자부터는 무조건 이쪽으로 들어오게 됩니다.

answer = answer * 10 + (c - '0');

이때 answer가 int형 이기 때문에 자동으로 int형으로 형 변환해서 들어가게 되는데,

아스키코드값으로 0 = 48 이기 때문에 (c - '0') or (c - 48) 0을 빼줘야 우리가 원하는 정수가 들어가게 됩니다.

1 = 0 * 10 + ( 1 )

12 = 1 * 10 + ( 2 )

123 = 12 * 10 + ( 3 )

1234 = 123 * 10 + ( 4)

이런 식으로 계산이 되어서 sign 값에 따라 return 하게 됩니다!

 

만약 (c - '0') or (c - 48)을 하지 않은 경우?

1 = 0 * 10 + ( 49 )

2 = 49 * 10 + ( 50 )

3 = 540 * 10 + ( 51 )

4 = 5451 * 10 + ( 52 )

5 = 54562 * 10 + ( 53 )

 

추가적으로 저도 이 글을 작성하다 자료를 찾아보고 알게 된 char의 Wrapper클래스 Character클래스의 메서드입니다.

Character.getNumericValue(c); 

메서드의 경우 char c = '1'이면 그 숫자 자체가 int형 1로 들어가게 됩니다.

 

출처: 프로그래머스, https://programmers.co.kr/learn/courses/30/lessons/12925

반응형
저작자표시 (새창열림)

'코딩 테스트 > Java' 카테고리의 다른 글

[프로그래머스]Level 1 : 하샤드 수(JAVA)  (0) 2021.05.23
[프로그래머스]Level 1 : 핸드폰 번호 가리기(JAVA)  (0) 2021.05.23
[프로그래머스]Level 1 : 짝수와 홀(JAVA)  (0) 2021.05.17
[프로그래머스]Level 1 : x만큼 간격이 있는 n개의 숫자(JAVA)  (0) 2021.05.17
[프로그래머스]Level 1 : 행렬의 덧셈(JAVA)  (0) 2021.05.17
'코딩 테스트/Java' 카테고리의 다른 글
  • [프로그래머스]Level 1 : 하샤드 수(JAVA)
  • [프로그래머스]Level 1 : 핸드폰 번호 가리기(JAVA)
  • [프로그래머스]Level 1 : 짝수와 홀(JAVA)
  • [프로그래머스]Level 1 : x만큼 간격이 있는 n개의 숫자(JAVA)
:j
:j
ddongjunn@gmail.com
  • :j
    dev.j
    :j
  • 전체
    오늘
    어제
    • :j
      • 프로그래밍 언어
        • Java
        • html
        • JavaScript
        • XML
        • JSON
        • CSS
        • jQuery
        • Web
        • k8s
        • JPA
      • 프레임워크
        • Spring
      • 코딩 테스트
        • Java
      • 네트워크
        • CCNA
      • 데이터베이스
        • Mssql
        • Oracle
      • 회고
      • :j story
      • CS
  • 블로그 메뉴

    • 홈
    • 태그
    • github
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    HAVING
    항해솔직후기
    오버로딩
    다형성
    항해99
    멤버변수
    class
    항해플러스
    group by
    지역변수
    id
    오버라이딩
    항해플러스백엔드
    항해백앤드
    Queue
    <br>
    Name
    appendChild
    MSSQL
    항해플러스백앤드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
:j
[프로그래머스]Level 1 : 문자열을 정수로 바꾸기(JAVA)
상단으로

티스토리툴바