새소식

항해 99 TIL

99클럽 코테 스터디 3일차 TIL [Character 클래스]

  • -

- 오늘의 학습 키워드 : Java - Character 클래스

 

[문제 이름 : 숫자 카드 나누기]

문제 url : https://school.programmers.co.kr/learn/courses/30/lessons/81301

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

내가 작성한 코드는 아래와 같다.

import java.util.*;

class Solution {
    public int solution(String s) {
        int answer = 0;
        String result = "";
        String temp = "";
        for(int i=0; i<s.length(); i++) {
            char c = s.charAt(i);
            // 숫자인 경우
            if(Character.isDigit(c)) {
                temp = "";
                result += c;
            } else {
                // 문자인경우
                temp += c;
            }
            // 문자를 리턴했는지 확인
            int num = getNumber(temp);
            if(num != -1) {
                temp = "";
                result += num;
            }
        }
        answer = Integer.parseInt(result);
        return answer;
    }
    
    static int getNumber(String s) {
        if(!s.isEmpty()) {
            switch(s) {
                case "zero":
                    return 0;
                case "one":
                    return 1;
                case "two":
                    return 2;
                case "three":
                    return 3;
                case "four":
                    return 4;
                case "five":
                    return 5;
                case "six":
                    return 6;
                case "seven":
                    return 7;
                case "eight":
                    return 8;
                case "nine":
                    return 9;
            }
        }
        return -1;
    }
}

 

Java에서 Character 클래스에 대한 지식이 있다면, 빠르게 풀이할 수 있는 문제다.

s의 길이만큼 순회하면서, 숫자면 결과값에 추가하고, 문자라면 해당 문자를 temp 문자열에 추가해주며 숫자에 해당하는 영어를 충족하는 경우에 결과값에 추가하도록 구현하였다.

 

다른 효과적인 풀이 방법이 있는지도 찾아보았다.

class Solution {
        public int solution(String s) {
            String[] numArr = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
            String[] wordArr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
            for (int i = 0; i < 10; i++) {
                s = s.replace(wordArr[i], numArr[i]);
            }
            int answer = Integer.parseInt(s);
            return answer;
        }
    }

더욱 쉽게 풀 수 있었는데, 빠르게 푸는 것을 목표로 해서 그런지 내 코드는 깔끔하지 않은 것 같다.. 

문제를 계속 풀며 다양한 방법을 떠올리도록 계속 도전해 나아가야겠다!

 

내가 풀이한 Character 클래스의 개념도 확실히 잡고 가면 좋을 것 같아서, 아래 정리해보고자 한다.

Character 클래스

Java.lang.Character 클래스의 기본 데이터 타입은 char에 대한 래퍼 클래스(wrapper class)이다.

기본 데이터 타입의 값을 객체 형식으로 표현하기 위해 사용한다.

 

1. 특정 대상인지 여부를 판별하는데 쓰이는 메서드

 

 - Character.isUpperCase(c); => c가 대문자인지 여부

 - Character.isLowerCase(c); => c가 소문자인지 여부

 - Character.isLetter(c); => c가 문자인지 여부

 - Character.isDigit(c); =? c가 숫자인지 여부

 - Character.isWhitespace(c); => c가 공백문자인지 여부

 

2. 특정 대상 타입으로 변환하는데 쓰이는 메서드

 - Character.toUpperCase(c); => c를 대문자로 변환한다.

 - Character.toLowerCase(c); => c를 소문자로 변환한다.

 

3. 타입 변환 시 쓰일 수 있다.

 - String s = Character.toString(c); => c를 문자열로 변환한다.

이는 String s = String.valueOf(c); 또는 String s = ch + ""로도 변환이 가능하다.


- 내일은 LCS(Longest Common Subsequence)이라는 최장 공통 부분수열을 구하는 알고리즘에 대해 복습해보려 한다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.