
내가 생각했을때 문제에서 원하는부분
숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다.
문자열에 있는 숫자를 차례대로 더하려고 합니다.
이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다.
숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.
내가 이 문제를 보고 생각해본 부분
Main164 클래스의 main 메서드는 코드가 인텔리제이에서 올바르게 동작하는지 확인하기 위한 테스트용 실행 공간이다.
문제에서 주어진 5가지 입출력 예시를 각각 s1부터 s5 변수에 담고, solution 메서드에 전달하여 결과를 콘솔에 출력한다.
int answer = 0;은 최종 결과(합계)를 저장할 변수이다.
String[] tokens = s.split(" ");는 입력받은 문자열 s를 공백 기준으로 쪼개서 배열로 만든다.
(예: "1 2 Z 3" $\rightarrow$ ["1", "2", "Z", "3"])int lastNumber = 0;은 "Z"를 만났을 때 어떤 숫자를 빼야 할지 알기 위해 직전에 더했던 숫자를 기억해 두는 변수이다.
for (String token : tokens) 문장을 통해 쪼갠 조각들을 하나씩 차례대로 검사한다.
조각이 "Z"인 경우 (if (token.equals("Z"))):
answer -= lastNumber;를 실행하여 바로 전에 더했던 숫자만큼 총합에서 빼준다.
조각이 숫자인 경우 (else):
Integer.parseInt(token)을 사용하여 문자열 숫자를 정수형(int) 데이터로 변환한다.
변환한 숫자를 answer += num;으로 총합에 더한다.
다음 번에 "Z"가 나올 때 빼야 하므로 lastNumber = num;에 방금 더한 숫자를 저장해 둔다.
모든 문자열 조각의 순회가 끝나면 최종 계산된 answer 값을 반환한다.
코드로 구현
class Solution {
public int solution(String s) {
int answer = 0;
String[] tokens = s.split(" ");
int lastNumber = 0;
for (String token : tokens) {
if (token.equals("Z")) {
answer -= lastNumber;
} else {
int num = Integer.parseInt(token);
answer += num;
lastNumber = num;
}
}
return answer;
}
}
프로그래머스 코드
package programmers.programmers2;
// 프로그래머스 컨트롤 제트
public class Main164 {
public static void main(String[] args) {
Main164 t = new Main164();
// 문제에 나온 모든 입출력 예시
String s1 = "1 2 Z 3";
String s2 = "10 20 30 40";
String s3 = "10 Z 20 Z 1";
String s4 = "10 Z 20 Z";
String s5 = "-1 -2 -3 Z";
System.out.println(t.solution(s1)); // 4 출력 예상
System.out.println(t.solution(s2)); // 100 출력 예상
System.out.println(t.solution(s3)); // 1 출력 예상
System.out.println(t.solution(s4)); // 0 출력 예상
System.out.println(t.solution(s5)); // -3 출력 예상
}
public int solution(String s) {
int answer = 0;
String[] tokens = s.split(" ");
int lastNumber = 0;
for (String token : tokens) {
if (token.equals("Z")) {
answer -= lastNumber;
} else {
int num = Integer.parseInt(token);
answer += num;
lastNumber = num;
}
}
return answer;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.