현재
[배열] 문자열을 정수로 본문
// 각 자리가 숫자(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'을 통해서 영점을 맞춰주는것이 필요하단것을 알게 되었다.
그래도 이문제를 통해서 배열의 생성방법에 대해서 익숙해졌다
'알고리즘 > 기타알고리즘문제' 카테고리의 다른 글
| 3.문장 속 단어(Split,substring) (0) | 2024.03.19 |
|---|---|
| 2. 대소문자 바꾸기(아스키코드, toLowerCase, toUpperCase) (0) | 2024.03.19 |
| 1. 문자 찾기(toCharArray) (0) | 2024.03.19 |
| 체스판 만들기(미완) (0) | 2023.09.18 |
| [AtcoderBeginnerContest][242][A]T-shirt (0) | 2023.09.03 |