[프로그래머스] 컨트롤 제트 – JAVA

프로그래머스 “컨트롤 제트” 문제 해결과정입니다.

컨트롤 제트

문제설명

숫자와 “Z”가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 “Z”가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 “Z”로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 1 ≤ s의 길이 ≤ 200
  • -1,000 < s의 원소 중 숫자 < 1,000
  • s는 숫자, “Z”, 공백으로 이루어져 있습니다.
  • s에 있는 숫자와 “Z”는 서로 공백으로 구분됩니다.
  • 연속된 공백은 주어지지 않습니다.
  • 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
  • s는 “Z”로 시작하지 않습니다.
  • s의 시작과 끝에는 공백이 없습니다.
  • “Z”가 연속해서 나오는 경우는 없습니다.

입출력 예

sresult
“1 2 Z 3”4
“10 20 30 40”100
“10 Z 20 Z 1”1
“10 Z 20 Z”0
“-1 -2 -3 Z”-3

문제 해결과정

본인은 프로그래머스에서 코드를 작성하기에 어려움을 느껴 먼저 이클립스에서 코드를 실행하고 확인 후 프로그래머스 웹 텍스트 에디터로 옮기는 작업을 했다. 이클립스에서 클래스 파일을 생성하고 main에서 실행하여 확인하였다.

이클립스 코드

while문
package Practice;
// 컨트롤 제트
public class Practice5 {
	public static void main(String[] args) {
		String s = "-1 -2 -3 Z";
		int sum = Integer.parseInt(s.split(" ")[0]);	// 맨 처음은 절대 Z가 아님.
		int sL = s.split(" ").length;
		int i = 1;

		while(sL > 1) { 								// 4 3 2 까지 3번 돌아야함.
			if(s.split(" ")[i].equals("Z")) {
					sum = sum - Integer.parseInt(s.split(" ")[i-1]); 
			}else {
				sum += Integer.parseInt(s.split(" ")[i]);
			}
			i++;
			sL--;
		}
		System.out.println(sum);
		
	}
}

먼저 예시 문자열을 선언하였다. 이후에 문자열 s에서 처음에 나오는 문자는 “Z” 가 절대 아니므로 변수 sum에 0번째 “숫자”를 넣어주었다. 이때 split은 문자열을 자르는 것이기 때문에 int형식의 sum에는 Integer.parseInt로 숫자 형태로 반환하여 넣어주었다. 반복할 횟수를 정하기 위해 s의 길이를 sL에, 문자열에서 자른 문자의 인덱스를 지정하기 위해 i를 선언해주었다. sL을 한번 돌 때마다 감소하도록 하는 조건으로 1보다 클 때까지 동작하는 while문을 썼다. 0번째 인덱스는 이미 sum에 들어가 있고, 이제 1번째 인덱스부터 “Z” 여부를 따져주면 되는데 만약 i에 위치하는 값이 “Z” 이면 i-1 번째 인덱스에서 총합을 빼주면 된다. 만약 “Z”가 아니라면 그냥 sum에다가 i번째 숫자를 더해주면 된다. 결과를 보기 위해 print문으로 출력하였다.

for문
package Practice;
// 컨트롤 제트
public class Practice5 {
	public static void main(String[] args) {
		String s = "-1 -2 -3 Z";
		int sum = Integer.parseInt(s.split(" ")[0]);	// 맨 처음은 절대 Z가 아님.
		int sL = s.split(" ").length;
		int i = 1;

		for (int j = sL; j > 1; j--) { // 4 3 2 까지 3번 돌아야함.
			if (s.split(" ")[i].equals("Z")) {
				sum = sum - Integer.parseInt(s.split(" ")[i - 1]);
			} else {
				sum += Integer.parseInt(s.split(" ")[i]);
			}
			i++;

		}
		System.out.println(sum);
		
	}
}

for문으로도 만들어 보았는데 sL말고는 특별하게 건들일 것이 없었다.

프로그래머스 코드

class Solution {
    public int solution(String s) {
		int sum = Integer.parseInt(s.split(" ")[0]);	// 맨 처음은 절대 Z가 아님.
		int sL = s.split(" ").length;
		int i = 1;

		while(sL > 1) { 								// 4 3 2 까지 3번 돌아야함.
			if(s.split(" ")[i].equals("Z")) {
					sum = sum - Integer.parseInt(s.split(" ")[i-1]); 
			}else {
				sum += Integer.parseInt(s.split(" ")[i]);
			}
			i++;
			sL--;
		}
		return sum;
    }
}

프로그래머스 코드에는 이클립스 코드를 복사해 print문으로 확인하던 정답을 return으로 변경해주고 예시를 제거하였다. 이후로 실행시켜보니 잘 동작하였다.

참고 – https://codegym.cc/ko/groups/posts/ko.512.jaba-string-split-mesodeu

최신글

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.