๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

[Codeforces] 721A: One-dimensional Japanese Crossword

by ์ฃผ๋ฐœ2 2020. 3. 13.
๋ฐ˜์‘ํ˜•

https://codeforces.com/problemset/problem/721/A

 

Problem - 721A - Codeforces

 

codeforces.com

์ฝ”๋“œ

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		String str = scan.next();
		int blackCount = 0;	// ์—ฐ์†๋œ ๊ฒ€์ • ์‚ฌ๊ฐํ˜•์˜ ํ›„
		List<Integer> list = new ArrayList<Integer>();
		
		for(int i=0; i<str.length(); i++) {
			// ํ˜„์žฌ ๊ฒ€์ •์ƒ‰ ๋ธ”๋ก์ผ ๋•Œ
			if(str.charAt(i) == 'B') 
				blackCount ++;
			
			// ์ „์— ๊ฒ€์ • ์‚ฌ๊ฐํ˜•์ด ์žˆ๊ณ , ํ˜„์žฌ ๋ธ”๋ก์ด ํ™”์ดํŠธ์ผ ๋•Œ
			if(blackCount != 0 && str.charAt(i) == 'W') {
				list.add(blackCount);
				blackCount = 0;
			}
			
			// ๋งˆ์ง€๋ง‰ ๋ธ”๋ก๊นŒ์ง€ ๋„๋‹ฌํ–ˆ์„ ๋•Œ, ๊ฒ€์ •์ƒ‰ ๋ธ”๋ก์ด ์นด์šดํŠธ ๋˜์–ด์žˆ๋Š”๊ฒฝ์šฐ
			if(i == str.length()-1 && blackCount != 0)
				list.add(blackCount);
		}
		
		System.out.println(list.size());
		for(int i : list)
			System.out.print(i + " ");
		
		scan.close();
	}
}

ํ’€์ด

1 x n ์˜ ์ง์‚ฌ๊ฐํ˜•์—์„œ, ์—ฐ์†๋œ ๊ฒ€์ •์ƒ‰์˜ ๊ฐฏ์ˆ˜์™€ ๊ฒ€์ •์ƒ‰ ๊ทธ๋ฃน์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

ArrayList๋ฅผ ์„ ์–ธํ•ด์„œ for๋ฌธ์„ ๋Œ๋ฉด์„œ ๊ฐ ๊ฒ€์ •์ƒ‰์˜ ๊ฐฏ์ˆ˜๋ฅผ ArrayList์— ๋„ฃ๋Š”๋‹ค.

๊ทธ๋ฃน์˜ ๊ฐฏ์ˆ˜๋Š” list์— ๋„ฃ์€ size()์™€ ๋™์ผํ•  ๊ฒƒ์ด๊ณ , ๊ฐ๊ฐ์˜ ์š”์†Œ๋ฅผ ๋ฝ‘์•„๋‚ด๋ฉด ์—ฐ์†๋œ ๊ฒ€์ •์ƒ‰์˜ ๊ฐฏ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ํ˜„์žฌ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒ‰์ด 'W'์ผ ๊ฒฝ์šฐ, ์ด์ „์— ๊ฒ€์ •์ƒ‰์œผ๋กœ ์น ํ•œ๊ฒŒ ์žˆ๋Š”๊ฒฝ์šฐ(blackCount != 0) list์— ๋„ฃ์–ด์ค€๋‹ค.

๋งˆ์ง€๋ง‰ if๋ฌธ์˜ ๊ฒฝ์šฐ, ์ง์‚ฌ๊ฐํ˜•์˜ ๋งˆ์ง€๋ง‰์ด W๋กœ ๋๋‚ฌ์„๊ฒฝ์šฐ, ์—ฐ์†๋œ ๊ฒ€์ • ๋ธ”๋ก์„ list์— ๋„ฃ์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€