땅지원
땅지원's Personal blog
땅지원
전체 방문자
오늘
어제
  • 전체 (353)
    • Frontend (2)
      • React (2)
    • Backend (90)
      • Java (16)
      • Python (19)
      • Spring (23)
      • Database (21)
      • Troubleshooting (8)
    • DevOps (27)
      • ELK (13)
    • CS (40)
    • OS (2)
      • Linux (2)
    • Algorithm (95)
      • concept (18)
      • Algorithm Problem (77)
    • 인공지능 (25)
      • 인공지능 (12)
      • 연구노트 (13)
    • 수업정리 (35)
      • 임베디드 시스템 (10)
      • 데이터통신 (17)
      • Linux (8)
    • 한국정보통신학회 (5)
      • 학술대회 (4)
      • 논문지 (1)
    • 수상기록 (8)
      • 수상기록 (6)
      • 특허 (2)
    • 삼성 청년 SW 아카데미 (6)
    • 42seoul (12)
    • Toy project (3)
    • 땅's 낙서장 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 20.11.6 BB21플러스 온라인 학술대회
  • 20.10.30 한국정보통신학회 온라인 학술대회

인기 글

태그

  • D
  • I
  • E
  • ㅗ
  • 이것이 리눅스다 with Rocky Linux9

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
땅지원

땅지원's Personal blog

Algorithm/Algorithm Problem

백준 2631 줄세우기(LIS, DP)

2022. 10. 18. 14:17
 

2631번: 줄세우기

KOI 어린이집에는 N명의 아이들이 있다. 오늘은 소풍을 가는 날이다. 선생님은 1번부터 N번까지 번호가 적혀있는 번호표를 아이들의 가슴에 붙여주었다. 선생님은 아이들을 효과적으로 보호하기

www.acmicpc.net

대표적인 LIS 문제이다.

 

처음 문제를 봤을 때 총 3가지로 생각 할 수 있었는데

 

1. 완전탐색 

모든 경우를 다 본다음에 그 중에서 가장 작은 녀석을 고르는 것

 

2. 그리디

오름차순으로 정렬하는 것이기 때문에 뒤에서 탐색해서 현재 값보다 큰 값을 만난다면 그 숫자를 이동시키는 로직 ==> 최소의 조건이 나오지 않음

 

3. LIS : 최장 부분 증가 수열

정렬을 최소로 하려고 하면 처음 주어진 배열에 대해서 증가를 보이는 애들은 그대로 놔두고 아닌 애들을 이동하는게 가장 최적일 것이다!

따라서, N - LIS를 구하는 것이 핵심

 

import java.lang.Math;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main_2631 {

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

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

        int[] data = new int[N];
        int[] dp = new int[N];

        for (int i = 0; i < N; i++) {
            data[i] = Integer.parseInt(br.readLine());
        }
        for (int i = 0; i < N; i++) {
            dp[i] = 1;
            for (int j = 0; j < i; j++) {
                if (data[i] > data[j])
                    dp[i] = Math.max(dp[i], dp[j] + 1);
            }
        }

        int max_value = 0;

        for (int i = 0; i < N; i++) {
            max_value = Math.max(max_value, dp[i]);
        }

        //System.out.println(Arrays.toString(dp));
        System.out.println(N - max_value);


    }
}

 

 

'Algorithm > Algorithm Problem' 카테고리의 다른 글

백준 2931 가스관(구현, 시뮬레이션)  (0) 2022.10.24
백준 9376 탈옥 (다익스트라, 0-1 BFS) - 아직 푸는중...  (1) 2022.10.22
땅지원의 A형 대비 기출 분석  (0) 2022.10.13
SWEA 2117 홈 방문 서비스(BFS)  (0) 2022.10.12
SWEA 4008 숫자만들기(DFS)  (0) 2022.10.12
    'Algorithm/Algorithm Problem' 카테고리의 다른 글
    • 백준 2931 가스관(구현, 시뮬레이션)
    • 백준 9376 탈옥 (다익스트라, 0-1 BFS) - 아직 푸는중...
    • 땅지원의 A형 대비 기출 분석
    • SWEA 2117 홈 방문 서비스(BFS)
    땅지원
    땅지원
    신입 개발자의 우당탕탕 기술 블로그

    티스토리툴바