쵼쥬
쵼쥬의 개발공부 TIL
쵼쥬
전체 방문자
오늘
어제
  • 분류 전체보기 (276)
    • 코딩테스트 (192)
      • [알고리즘] 알고리즘 정리 (7)
      • [백준] 코딩테스트 연습 (126)
      • [프로그래머스] 코딩테스트 연습 (59)
    • Spring (71)
      • [인프런] 스프링 핵심 원리- 기본편 (9)
      • [인프런] 스프링 MVC 1 (6)
      • [인프런] 스프링 MVC 2 (4)
      • [인프런] 실전! 스프링 부트와 JPA 활용1 (7)
      • [인프런] 실전! 스프링 부트와 JPA 활용2 (5)
      • [인프런] 실전! 스프링 데이터 JPA (7)
      • [인프런] 실전! Querydsl (7)
      • JWT (5)
      • [인프런] Spring Cloud (17)
      • [인프런] Spring Batch (4)
    • Java (6)
      • [Java8] 모던인자바액션 (4)
      • [부스트코스] 웹 백엔드 (2)
      • [패스트캠퍼스] JAVA STREAM (0)
    • CS (6)
      • 디자인 패턴과 프로그래밍 패터다임 (2)
      • 네트워크 (4)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 자바
  • 구현
  • 인프런
  • spring
  • MVC
  • 비트마스킹
  • 백준
  • 타임리프
  • 프로그래머스
  • 코딩테스트
  • BFS
  • 위클리 챌린지
  • 누적합
  • jpa
  • 백분
  • 스프링
  • querydsl
  • 부스트코스
  • 알고리즘
  • Spring Data JPA

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쵼쥬

쵼쥬의 개발공부 TIL

좋은 수열 - 2661번
코딩테스트/[백준] 코딩테스트 연습

좋은 수열 - 2661번

2021. 10. 4. 17:26

 


풀이 방법

DFS에서 조건을 걸어 백트래킹으로 풀이했다.

먼저 좋은 수열인지 아닌지 판단하는 check 함수를 작성해주었다. 

가장 작은 수를 나타내는 수열을 찾기 위해 DFS에서 1,2,3 순서대로 확인해 주었다. 

길이가 N과 같게 되면 find 를 true 로 해줘서 return 하는 것으로 구현했다.

 

내 코드

package com.company;

import java.io.*;


public class Main {
    static int N;
    static Boolean find = false;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());

        dfs("");

    }

    static void dfs(String num) {
        if(find)
            return;

        if (num.length() == N) {
            System.out.println(num);
            find = true;
            return;
        }

        if (check(num + "1")) {
            dfs(num + "1");
        }
        if (check(num + "2")) {
            dfs(num + "2");
        }
        if (check(num + "3"))
            dfs(num + "3");
    }

    static Boolean check(String num) {
        for (int i = 1; i <= num.length() / 2; i++) {
            for (int j = 0; j + 2 * i <= num.length(); j++) {
                String sub = num.substring(j, j + i);
                String temp = num.substring(j + i, j + 2 * i);
                if (temp.equals(sub)) {
                    return false;
                }
            }
        }

        return true;
    }
}

'코딩테스트 > [백준] 코딩테스트 연습' 카테고리의 다른 글

징검다리 건너기 - 21317번  (0) 2021.10.05
스티커 - 9465번  (0) 2021.10.05
말이 되고픈 원숭이 - 1600번  (0) 2021.10.04
뒤집기 II - 1455번  (0) 2021.10.04
알바생 강호 - 1758번  (0) 2021.10.04
    '코딩테스트/[백준] 코딩테스트 연습' 카테고리의 다른 글
    • 징검다리 건너기 - 21317번
    • 스티커 - 9465번
    • 말이 되고픈 원숭이 - 1600번
    • 뒤집기 II - 1455번
    쵼쥬
    쵼쥬

    티스토리툴바