๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ ๋ฐฑ์ค 15729 ๋ฐฉํ์ถ ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
15729๋ฒ: ๋ฐฉํ์ถ
์ฒซ์งธ ์ค์ N(1 ≤ N ≤ 1,000,000)๊ฐ ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ์ชฝ์ง์ ์ ํ ์๋ N์๋ฆฌ์ ์๊ฐ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค.
www.acmicpc.net
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ด ๋ฌธ์ ๋ Greedy ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค.
์ฐ์ 2๊ฐ์ง์ ๋ถ์ ๋๋ ์ ์๊ฐํ ์ ์๋๋ฐ
- ๋ถ์ด ๋ชจ๋ ๊บผ์ง ์ํ ->
starts
- ์ํ๋ ๋ถ์ด ์ผ์ง ์์ฑ ์ํ ->
ends
๋ฌธ์ ํด๊ฒฐ ์ปจ์ ์ starts ์์ ๋ฐฐ์ด ์์ ํ๋์ฉ ๋๋ฉฐ ends ๋ฐฐ์ด๊ณผ ๋ค๋ฅธ ์ธ๋ฑ์ค๊ฐ ์๋ค๋ฉด ๋ค์ 2๊ฐ ๋ถ์ toggle ์์ผ์ค๋ค๋ ๊ฒ์ด๋ค.
ends ๋ฐฐ์ด์ ๊ธธ์ด๋งํผ ๋ฐ๋ณต์ ๋๋ฉฐ ๊ณ์ํด์ toggle ์์ผ์ฃผ๊ณ toggle ํ์๋งํผ counting ์ ํด์ฃผ๋ฉด ๋๋ค.
ํ์ง๋ง ์ฃผ์ํด์ผ ํ๋ ๊ฒ์ด 2๊ฐ ์ดํ์ ๋ถ์ toggle ํ ๋, ๋ฐฐ์ด ์ธ๋ฑ์ค์ size ๋ณด๋ค ๋์ด๊ฐ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋๋ฐ, ์ด ๋๋ ์๋ฌด ์ฐ์ฐ์ ํ์ง ์๊ณ ๋์ด๊ฐ๋ฉด ๋๋ค.
์ ๋ต ์ฝ๋
public class Main {
private static int answer = 0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
String[] rooms = br.readLine().split(" ");
String[] start = new String[n];
for (int i = 0; i < rooms.length; i++) {
start[i] = "0";
}
for (int i = 0; i < rooms.length; i++) {
if (rooms[i].equals(start[i])) continue;
toggleThree(start, i);
}
bw.write(String.valueOf(answer));
bw.flush();
bw.close();
}
private static void toggleThree(String[] a1, int index) {
for(int i = 0; i < 3; i++) {
if(i + index < a1.length) {
toggle(a1, i + index);
}
}
answer++;
}
private static void toggle(String[] a1, int index) {
if(a1[index].equals("0")) a1[index] = "1";
else a1[index] = "0";
}
}
๋๊ธ