[Baekjoon] 5002_λμ΄λ§¨
λ¬Έμ (μΆμ²: https://www.acmicpc.net/problem/5002)
< λμ΄λ§¨ >
λ¬Έμ νμ΄
μ¬μμ λ¨μμ μ°¨μ΄λ₯Ό μ΅μκ° λλλ‘ μ¬μμ λ¨μ μλ₯Ό λΉκ΅ν΄ μ μ μ±λ³μ λ¨Όμ μ μ₯μν¨λ€. λ§μ½ μ¬λ μκ° μ μ μ±λ³μ λ¨Όμ μ μ₯μν¬ μ μλ€λ©΄ μ μΈμ΄κ° κΈ°μ΅ν μ μλ μ°¨μ΄ λ΄μμ μ¬λ μκ° λ§μ μ±λ³μ μ μ₯μν¨λ€.
my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _5002_ { // λμ΄λ§¨
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int x = Integer.parseInt(bf.readLine());
String str = bf.readLine();
int w = 0, m = 0, idx1 = 0, idx2 = 1;
while (Math.abs(m - w) <= x && x != 0) {
if (idx1 == 0) {
if (str.charAt(0) == 'M') {
m += 1;
} else {
w += 1;
}
idx1 = idx2 + 1;
}
if (Math.abs(m - w) > x || (idx1 >= str.length() && idx2 >= str.length())) {
break;
}
boolean flag = false;
if (m > w) {
if (idx1 < str.length() && w + 1 - m <= x && str.charAt(idx1) == 'W') {
flag = true;
w += 1;
idx1 = Math.max(idx1, idx2) + 1;
} else if (idx2 < str.length() && w + 1 - m <= x && str.charAt(idx2) == 'W') {
flag = true;
w += 1;
idx2 = Math.max(idx1, idx2) + 1;
} else if (idx1 < str.length() && m + 1 - w <= x && str.charAt(idx1) == 'M') {
flag = true;
m += 1;
idx1 = Math.max(idx1, idx2) + 1;
} else if (idx2 < str.length() && m + 1 - w <= x && str.charAt(idx2) == 'M') {
flag = true;
m += 1;
idx2 = Math.max(idx1, idx2) + 1;
}
} else {
if (idx1 < str.length() && m + 1 - w <= x && str.charAt(idx1) == 'M') {
flag = true;
m += 1;
idx1 = Math.max(idx1, idx2) + 1;
} else if (idx2 < str.length() && m + 1 - w <= x && str.charAt(idx2) == 'M') {
flag = true;
m += 1;
idx2 = Math.max(idx1, idx2) + 1;
} else if (idx1 < str.length() && w + 1 - m <= x && str.charAt(idx1) == 'W') {
flag = true;
w += 1;
idx1 = Math.max(idx1, idx2) + 1;
} else if (idx2 < str.length() && w + 1 - m <= x && str.charAt(idx2) == 'W') {
flag = true;
w += 1;
idx2 = Math.max(idx1, idx2) + 1;
}
}
if (!flag) {
break;
}
}
System.out.println(m + w);
}
}
λ³μ)
x : κΈ°μ΅ν μ μλ κ°μ₯ ν° μ°¨μ΄
str : μ€μ μ μλ μμ
w, m : μ μ₯ν μ¬μ, λ¨μ μ¬λ μ
idx1, idx2 : μ€μ μ μλ 첫 λ²μ§Έ, λ λ²μ§Έ μ¬λ
flag : μ μ₯ μ¬λΆ
κΈ°μ΅ν μ μλ κ°μ₯ ν° μ°¨μ΄λ₯Ό μ λ ₯λ°λλ€. μ€μ μ μλ μμλ₯Ό μ λ ₯λ°μ μ μ₯ν μ¬μμ λ¨μ μ μ°¨μ΄κ° xμ΄νμΌ λ λ€μ κ³Όμ μ λ°λ³΅νλ€.
1) μ μΌ μ²μμ μ μ₯ν λλ μ¬μμΈμ§ λ¨μμΈμ§ μκ΄μμΌλ―λ‘ 0λ²μ§Έ μ¬λμ μ μ₯μν¨λ€.
2) μ μ₯ν μ¬μμ λ¨μμ μ μ°¨μ΄κ° xλ³΄λ€ ν¬κ±°λ μ€μ μ μλ λͺ¨λ μ¬λμ λ€ μ μ₯μμΌ°λ€λ©΄ μ’ λ£νλ€.
3) μ μ₯ν μ¬λ μ€ λ¨μ μκ° λ λ§λ€λ©΄
3-1) μ€ μ μλ μ¬λμ 첫 λ²μ§Έ μ¬λ, λ λ²μ§Έ μ¬λ μ€μμ μ¬μκ° μλ€λ©΄ μ μ₯μν¨λ€.
3-2) μ¬μκ° μκ³ λ¨μλ₯Ό μ μ₯μμΌ°μ λ μ μ₯ν μ¬μμ λ¨μμ μ°¨μ΄ μκ° xμ΄νλΌλ©΄ λ¨μλ₯Ό μ μ₯μν¨λ€.
4) μ μ₯ν μ¬λ μ€ μ¬μ μκ° λ λ§λ€λ©΄
4-1) μ€ μ μλ μ¬λμ 첫 λ²μ§Έ μ¬λ, λ λ²μ§Έ μ¬λ μ€μμ λ¨μκ° μλ€λ©΄ μ μ₯μν¨λ€.
4-2) λ¨μκ° μκ³ μ¬μλ₯Ό μ μ₯μμΌ°μ λ μ μ₯ν μ¬μμ λ¨μμ μ°¨μ΄ μκ° xμ΄νλΌλ©΄ μ¬μλ₯Ό μ μ₯μν¨λ€.
5) λ§μ½ μ무λ μ μ₯μν¬ μ μλ μν©μ΄λΌλ©΄ μ’ λ£νλ€.
μ΅μ’ μ μ₯ν μ¬λ μμΈ m+wλ₯Ό μΆλ ₯νλ€.