
-Code
import java.io.*;
public class BOJ18271 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// 이전 각 팀의 점수 히스토리가 필요하므로 저장
int[][] scoreHistory = new int[n + 1][2];
int[] teamScore = new int[2];
for (int i = 1; i <= n; i++) {
int goalTeam = Integer.parseInt(br.readLine());
teamScore[goalTeam - 1]++;
// teamScore로 바로 저장하면 주소 문제 발생 위험으로
// 각각 따로 저장
scoreHistory[i][0] = teamScore[0];
scoreHistory[i][1] = teamScore[1];
}
int equal = 1;
int maxTurnOver = 0;
for (int i = 1; i <= n; i++) {
// 2개가 같은 경우 equal 증가
if (scoreHistory[i][0] == scoreHistory[i][1]) {
equal++;
}
// 현재 골 넣은 팀과 다른 팀 확인
int nowGoal = scoreHistory[i - 1][0] < scoreHistory[i][0] ? 0 : 1;
int other = nowGoal == 0 ? 1 : 0;
// 현재 지고있어서 역전할 수 있는지 확인
if (scoreHistory[i - 1][nowGoal] < scoreHistory[i - 1][other]) {
int nowTurnOver = getTurnOverValue(scoreHistory, i, nowGoal);
maxTurnOver = Math.max(maxTurnOver, nowTurnOver);
}
}
System.out.println(teamScore[0] + " " + teamScore[1]);
System.out.println(equal);
System.out.println(maxTurnOver);
}
// 최대 역전 골 갯수 구하기
private static int getTurnOverValue (int[][] scoreHistory, int start, int team1) {
int answer = 0;
int team2 = team1 == 0 ? 1 : 0;
boolean isTurnOver = false;
for (int j = start; j < scoreHistory.length ; j++) {
// 상대 팀이 골을 넣으면 연속골이 아니므로 탈출
if (scoreHistory[j][team2] > scoreHistory[j - 1][team2]) {
break;
}
answer = j - start + 1;
// 연속 골을 넣다가 역전한 경우 최대값 갱신 및 탈출
if (scoreHistory[j][team1] > scoreHistory[j][team2]) {
isTurnOver = true;
}
}
return isTurnOver ? answer : 0;
}
}
처음에 역전 상황을 boolean으로만 관리하려고 하니 로직이 꼬여서 작성이 잘 안 되었습니다. 그래서 히스토리를 2중 배열로 관리하라는 힌트를 받고 구현했으나 맨시티의 역전 연속 골만 계산해서 틀려서 이 부분도 수정했습니다. 추가로 역전이 되면 이후 넣는 골도 같이 추가해줘야 했는데 이 부분도 생각하지 못해서 한번 더 틀렸었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 7662번 이중 우선순위 큐 (0) | 2026.01.19 |
|---|---|
| [백준/Java] 1931번 회의실 배정 (0) | 2026.01.19 |
| [백준/Java] 10026번 적록색약 (0) | 2026.01.18 |
| [프로그래머스/Java] 이중우선순위큐 (0) | 2026.01.18 |
| [백준/Java] 21736번 헌내기는 친구가 필요해 (0) | 2026.01.18 |