文系プログラマーのプログラミング備忘録

Java、競プロ、数学などについて書いてます

Brute-force Attack [AtCoder Beginner Contest 029 C]

atcoder.jp


以前記事に書いた再帰関数をそのまま流用できる問題です。


再帰関数で部分集合を全列挙する - 文系プログラマーのプログラミング備忘録


枝分かれの部分を "a","b","c" の3つにして、終了条件を長さが n になったときにすればよいです。


void solve () {
		
		dfs(nextInt(), new StringBuilder(""));
		
	}
	
	static void dfs (int n, StringBuilder sb) {
		if (n == 0) {
			System.out.println(sb);
			return;
		}
		dfs(n-1, new StringBuilder(sb).append("a"));
		dfs(n-1, new StringBuilder(sb).append("b"));
		dfs(n-1, new StringBuilder(sb).append("c"));
	}


競プロをはじめたときはイメージしにくくて苦手だった再帰関数ですが、だんだん慣れてきました。