알고리즘/프로그래머스 1단계
프로그래머스 - 컨트롤 제드 - C++
게임만드는학생
2023. 8. 14. 14:50
https://school.programmers.co.kr/learn/courses/30/lessons/120853
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
using namespace std;
int solution(string s) {
int answer = 0;
int before = 0;
for (int i = 0; i < s.length();)
{
string t = "";
while (i < s.length() && s[i] != ' ')
{
t += s[i];
i++;
}
if (t == "Z")answer -= before;
else
{
int n = stoi(t);
answer += n;
before = n;
}
i++;
}
return answer;
}
설명
공백으로 구분된 문자열을 읽으며 숫자, 공백, Z 에 따라 특정 행동을 하면 된다.
먼저 i for문으로 문자열의 길이까지만 읽도록 한다.
while (i < s.length() && s[i] != ' ')
{
t += s[i];
i++;
}
그리고 그 안쪽에 첫 번째 while 문으로 공백 이전까지의 문자열을 t에 저장한다.
숫자면 "1234" 이런식으로 Z 면 "Z" 로 t에 저장된다.
i for문 즉, 가장 바깥 for문에서 마지막에 i++ 을 안해줬다. 따라서 while 문에서 공백이 나올때까지 i++을 해줘야 다음 인덱스를 확인할 수 있다.
if (t == "Z")answer -= before;
else
{
int n = stoi(t);
answer += n;
before = n;
}
그리고 그 값이 Z 면 바로 이전 숫자였던 값을 answer에서 빼준다.
바로 이전 값은 before 변수에 저장해놓는다.
Z가 아니면 숫자라는 얘기이므로 문자열을 숫자로 바꿔주는 stoi() 를 사용한다.
그리고 그 값을 before에 저장한다. 그래야 다음번에 Z 가 나오면 컨트롤 제트할 수 있기 때문이다.
마지막에 i++ 을 한 번 하는 이유는 while문에서 공백이 나왔을 때 i는 공백 인덱스를 가리키고 있다.
따라서 1을 증가시켜 그 다음 문자열부터 확인하기 위함이다.