๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 5002_๋„์–ด๋งจ

๋ฟŒ์•ผ._. 2024. 6. 19. 14:43

Silver II

๋ฌธ์ œ(์ถœ์ฒ˜: 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๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.