문제
https://www.acmicpc.net/problem/2661
2661번: 좋은수열
첫 번째 줄에 1, 2, 3으로만 이루어져 있는 길이가 N인 좋은 수열들 중에서 가장 작은 수를 나타내는 수열만 출력한다. 수열을 이루는 1, 2, 3들 사이에는 빈칸을 두지 않는다.
www.acmicpc.net
import java.util.Scanner;
public class Main2661 {
static int N;
static String M;
public static void sequence(String m) {
if (m.length() == N) {
System.out.println(m);
System.exit(0);
} else {
for (int i=1; i<4; i++) {
if (ischeck(m+i)) {
sequence(m+i);
}
}
}
}
public static boolean ischeck(String m) {
int length = m.length()/2;
for (int i=1; i<=length; i++) {
if (m.substring(m.length()-i).equals(m.substring(m.length()-2*i, m.length()-i))) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
sc.close();
sequence("");
}
}
1. 나중에 꼭 다시 풀어봐야하는 문제
2. 처음 접근은 문자열이 아닌 배열로 접근했다. 배열로 접근하다보니 비교하는 부분에서 자꾸만 막혔다. 결국 구글링을 통해 다른 풀이들을 보게 되었다.
3. 사실 풀이 자체는 크게 어려운 부분이 없다. 다만 문자열을 검색하는 그 과정을 코드로 풀어내는 일이 쉽지 않았다. 한 번보고 생각하며 따라 치고 몇번을 계속해도 틀렸다. 그렇기에 나중에 꼭 다시 풀어봐야만 한다. isCheck메소드의 if문에 있는 조건식의 로직을 반드시 기억하자. 어떤 식으로든 활용을 하게 될 순간이 올것이라 확신한다.
'백준' 카테고리의 다른 글
백준 5568번 (0) | 2022.11.17 |
---|---|
백준 2422번 (0) | 2022.11.16 |
백준 1969번 ☆ (0) | 2022.11.15 |
백준 22864번 (0) | 2022.11.15 |
백준 19532번 (0) | 2022.11.10 |