[2022.08.23] 이코테 곱하기 혹은 더하기 문제 (C++)

REASON·2022년 8월 22일
0

알고리즘

목록 보기
3/20

곱하기 혹은 더하기

문제 :
각 자리가 숫자 0부터 9로만 이루어진 문자열 S가 주어졌을 때
왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하여 숫자 사이에 "x" 혹은 "+" 연산자를 넣어 결과적으로 만들 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

예를 들어 02984 라는 문자열로 만들 수 있는 가장 큰 수는 ((((0 + 2) x 9) x 8) x 4) = 576이다. 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어진다.

입력 조건

첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어진다 ( 1 ≤ S의 길이 ≤ 20 )

출력 조건

첫째 줄에 만들어질 수 있는 가장 큰 수를 출력


직접 풀어보기!

#include <bits/stdc++.h>
using namespace std;

int main (){
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	int result = 0;
	
	string s;
	cin >> s;
	
	for(int i = 0; i < s.length(); i++){
		if(s[i]-'0' == 0 || s[i]-'0' == 1){
			result += s[i] - '0';
		}else{
			if(result == 0){
				result = 1;
			}
			result *= s[i] - '0';	
		}
	}
	
	cout << result << "\n";
	
	return 0;
}

문자열을 숫자로 형변환 하는 방법을 몰라서 한참 헤맸다..ㅜㅜ
출력된걸 보고 형변환을 해야겠다는 걸 직감했지만 방법을 몰라서ㅋㅋㅋ 구글링해보니 편법 느낌으로 문자열 - '0' 을 하면 된다는 것을 알았다.

제대로 잘 짰나 테스트 해보는데 111 을 입력하면 1이라고만 출력되길래 뭐지 했는데 if 조건문에서도 마찬가지로 문자열을 숫자로 형변환해서 비교 연산을 해야 됐던 거였다..!
stoi 함수를 사용해서 숫자로 바꾸려고 했는데 string이 아니라 char여서 불가능한 건지 에러가 났다.ㅠㅠ

ㅎㅎ 이번건 어떻게 풀어야지! 하는건 있어도 문법을 몰라서 오래걸렸던 것 같다. 잘 기억해놔야겠다..
코테 문제 풀면서 모르는 c++ 문법은 같이 병행해서 공부해야겠다.

다 풀어보고 동빈님 풀이를 보니 애초에 첫번째 숫자를 result에 넣고 시작하셨다. 와 이렇게하면 중첩 if문 안써도 되겠다..는 생각과 항상 받은 거 맨 앞에서부터 시작해야 된다는 고정관념(?)에서 조금 벗어날 수 있을 것 같다...ㅎ


참고 자료
2. 그리디 & 구현

0개의 댓글