[SWEA 5432] 쇠막대기 자르기

Paul Kang·2021년 9월 12일
0

알고리즘

목록 보기
4/6
post-thumbnail

💡 Learned

count: 조각난 개수
numOfBars: 레이저가 자르는 그 시점의 막대기의 개수

  1. '(' 만나면 numOfBars++
  2. ')' 만나면 막대기의 끝을 의미 => count++ and numOfBars--
  3. '*' 레이저 만나면 막대기 수 만큼 count 증가 (예를들어 막대기가 3개면 count+=3)
  • 레이저를 '*' 로 치환하는 작업이 핵심이 아닐까 싶습니다. '('')'로 이루어졌기 때문에 레이저를 구분한 것이 문제를 분석하기 쉽게 만들어 줍니다.
  • 위의 3가지 특이점을 발견하는 것이 쉬운 일은 아니지만 규칙성을 찾으려고 노력해야 합니다.

📑 Submitted

(JAVA)

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
// 쇠막대기 자르기
public class SWEA5432 {

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("res/sample_input2.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb;
		int T = Integer.parseInt(br.readLine());
		int numOfLines = 0;
		for (int test_case = 1; test_case <= T; test_case++) {
			sb = new StringBuilder();
			int cnt = 0; // 조각난 개수
			String str = br.readLine();
			// '()' 레이저를 '@'으로 치환
			str = str.replace("()", "@");
			char[] temp = str.toCharArray();

			for (char c : temp) {
				switch (c) {
				case '(':
					numOfLines++;
					break;
				case ')':
					cnt += 1; // 라인 하나 끝나면 +1
					numOfLines--;
					break;
				case '@':
					cnt += numOfLines; // 레이저 만나면 라인 수 만큼 증가
					break;
				}
			}

			sb.append("#" + test_case);
			sb.append(" ");
			sb.append(cnt);
			System.out.println(sb.toString());
		}

	}

}

(JS)

    function solution(s) {
      let answer = 0; // 카운트
      let numOfBars = 0; // 막대기 수
      s = s.replaceAll('()', '*'); // 레이저 치환

      for (const x of s) {
        switch (x) {
          case '(':
            numOfBars++;
            break;
          case ')':
            answer += 1; // 막대기 하나 끝나면 +1
            numOfBars--;
            break;
          case '*':
            answer += numOfBars; // 레이저 만나면 막대기 수 만큼 증가
            break;
        }
      }
      console.log(answer);
    }
    let str = "(((()(()()))(())()))(()())";
    solution(str);
profile
뭐든 기록하면 자산!

0개의 댓글