현재

[배열] 문자열을 정수로 본문

알고리즘/기타알고리즘문제

[배열] 문자열을 정수로

AAAge 2023. 8. 30. 20:55
//      각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때,
//      왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며
//      숫자 사이에 ‘×’ 혹은 ‘+’ 연산자를 넣어 결과적으로 만들어질 수 있는
//      가장 큰 수를 구하는 프로그램을 작성하세요.
//      단, +보다 ×를 먼저 계산하는 일반적인 방식과는 달리,
//      모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.
//      • 예를 들어 02984라는 문자열로 만들 수 있는 가장 큰 수는
//      ((((0 + 2) × 9) × 8) × 4) = 576입니다.
//      또한 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어집니다.

public class Main {
    public static void main (String[]args) {
       
        String S = "02984"; //
        int SList[] = new int [S.length()];
       
        for ( int x = 0; x < S.length(); x++) {
            int number = S.charAt(x); // S 문자열을 변수 number값에 저장한다. charAt(0)부터 시작하는걸 알 수 있다.
            number = number - '0';
           
            SList[x] = number; // 저장된 number값을 SList[0] = 첫번째 배열부터 저장하기 시작한다.
            }
        int sum = 0 ; // sum을 0값으로 줘야지 다른 계산에 장애를 끼치지 않는다.
        for ( int x = 0; x < S.length();x++) { // 배열의 값을 확인하는 과정
            if(SList[x] <= 1 || sum <= 1) { // 배열의 값이 0,1이거나 sum값이 1이하면 동작한다
                sum = sum + SList[x];
               
            }else if(SList[x] >= 2) { 
                sum = sum * SList[x];
            }
        }
        System.out.println(sum);
        }
       
    }

<느낀점>

5~6시간은 고민을 했던문제이다.

어느정도까지는 구현에 성공했지만, 테스트 케이스가 없어서 여러가지 값을 넣다보니까

맨 앞자리에 0 이 있으면 어쩔때 계산이 잘 되지 않는 경우 였다.

해결 방법으로는 sum값에 0을 주고 초기값을 설정하면 해결할 수 있는문제였다.

풀고나서 보면은 간단한 문제였지만 처음에는 문자열을 정수로 받는것도 헷갈렸었다.

그리고 아스키코드 값이 입력 되기때문에 '0'을 통해서 영점을 맞춰주는것이 필요하단것을 알게 되었다.

그래도 이문제를 통해서 배열의 생성방법에 대해서 익숙해졌다