-
5432. 쇠막대기 자르기 - 자바(JAVA)알고리즘/SW Expert Academy 2022. 4. 15. 00:01
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWVl47b6DGMDFAXm
문제 해석
여러개의 쇠막대기를 레이저로 절단하려고 한다.
() 는 레이저를 의미합니다.
쇠막대기의 왼쪽 끝은 '(' 으로 오른쪽 끝은 ')' 으로 표현합니다.
위와 같은 방식으로 쇠막대기가 잘리게되면 17개로 잘리게 됩니다.
쇠막대기와 레이저의 배치를 나타내는 괄호 표현이 주어졌을 때, 잘려진 쇠막대기 조각의 개수를 구하세요
문제 풀이 전 설계
입력값을 toCharArray로 char형 배열로 바꾸어 주고 반복문을 시작합니다.
'(' 는 레이저일수도 있고, 쇠막대기 일수도있습니다.
이후에 레이저라면 쇠막대기의 개수만큼 증가시키고 레이저가 아니라면 쇠막대기를 하나 증가시킵니다.
')'를 만나게 되면 쇠막대기의 끝으로 판단하고 쇠막대기를 하나 감소시킵니다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Solution_5432_쇠막대기자르기 { public static void main(String[] args) throws NumberFormatException, IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); StringBuilder sb = new StringBuilder(); for (int tc = 1; tc <= T; tc++) { int answer = 0, metalCount = 0; String str = br.readLine(); char[] ch = str.toCharArray(); int size = ch.length; for (int i = 0; i < size; i++) { if (ch[i] == '(') { // 레이저 또는 쇠막대기의 시작 if (ch[i + 1] == ')') { // 레이저라면 answer += metalCount; i++; continue; } metalCount++; answer++; continue; } metalCount--; } sb.append("#" + tc + " " + answer + "\n"); } System.out.println(sb); } }
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
3124. 최소 스패닝 트리 - 자바(JAVA) (0) 2022.05.16 1218. [S/W 문제해결 기본] 4일차 - 괄호 짝짓기 (0) 2022.05.01 7465. 창용 마을 무리의 개수 - 자바(JAVA) (0) 2022.04.09 1238. [S/W 문제해결 기본] 10일차 - Contact (0) 2022.04.06 1974. 스도쿠 검증 - 자바(JAVA) (0) 2022.04.03