본문 바로가기
알고리즘/SWEA

[Java] SWEA 4789번 성공적인 공연 기획

by 컴공맨 2021. 2. 5.
 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

현재까지의 박수치는 사람들을 계속 갱신해가면서 만약 박수치기위한 사람이 모자라다면 고용된 사람은 현재까지 (박수치고 있어야되는 사람(배열에서의 i 번째)) - (현재까지 박수친 사람)을 하여 구했습니다.

또한, 현재까지 박수친 사람에 고용된 사람까지 포함해야 뒤에 남아있는 다른 사람들도 검사를 할 수 있으므로 고용자들을 추가하여 조건이 됬다고 가정하면 현재 i 명의 사람들이 현재 박수를 치고 있으므로 i명이 박수를 치고 있다면 박수를 칠 수 있는 사람들(배열[i])을 i명과 더해주어 현재까지 박수치는 사람의 수를 갱신하게하여 해결했습니다.

 


코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Solution {
	public static int[] info;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder("");
		
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc <= T; ++tc) {
			String input = br.readLine();
			int len = input.length();
			info = new int[len];
			
			for (int i = 0; i < len; ++i) {
				info[i] = input.charAt(i) - '0';
			}
			
			int curPeople = 0;
			int employerCnt = 0;
			
			for (int i = 0; i < len; ++i) {
				if (curPeople >= i) {
					curPeople += info[i];
					continue;
				}
				else {
					employerCnt += (i - curPeople);
					// 고용자를 두어야 뒤의 사람들도 조사가 가능하다!
					// i 전까지의 사람들이 부족하다는 의미이므로 최소인원의 고용자를 즉, 1명씩 0인 위치에 포함하면
					// i 명의 사람들이 있게되고  i명 이상일 때 박수치는 사람들도 포함해야하므로 info[i]를 더한다.
					curPeople = i + info[i];
				}
			}
			
			sb.append("#").append(tc).append(" ").append(employerCnt);
			bw.write(sb.toString());
			bw.newLine();
			sb.setLength(0);
		}
		
		bw.flush();
	}
}

 

pyo7410/Algorithm

1일 1커밋을 목표로! Contribute to pyo7410/Algorithm development by creating an account on GitHub.

github.com