풀이
현재까지의 박수치는 사람들을 계속 갱신해가면서 만약 박수치기위한 사람이 모자라다면 고용된 사람은 현재까지 (박수치고 있어야되는 사람(배열에서의 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();
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[Java] SWEA 7227번 사랑의 카운슬러 (0) | 2021.02.08 |
---|---|
[Java] SWEA 6853번 직사각형과 점 (0) | 2021.02.06 |
[Java] SWEA 4371번 항구에 들어오는 배 (0) | 2021.02.03 |
[Java] SWEA 6019번 기차사이의 파리 (0) | 2021.02.02 |
[Java] SWEA 3376번 파도반 수열 (0) | 2021.02.01 |