이 영역을 누르면 첫 페이지로 이동
쿄코코 블로그의 첫 페이지로 이동

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

백준 18353(병사 배치하기) - Python(파이썬) - LIS,다이나믹

  • 2022.05.26 23:00
  • [백준] Python,Java로 풀기📖/다이나믹
    반응형
     

    18353번: 병사 배치하기

    첫째 줄에 N이 주어진다. (1 ≤ N ≤ 2,000) 둘째 줄에 각 병사의 전투력이 공백을 기준으로 구분되어 차례대로 주어진다. 각 병사의 전투력은 10,000,000보다 작거나 같은 자연수이다.

    www.acmicpc.net

    이와 LSI에 대한 설명 & 비슷한 문제

     

    백준 11053( 가장 긴 증가하는 수열 ) - Python(파이썬),Java(자바)- 다이나믹(LIS)

    참고 링크 : https://www.youtube.com/watch?v=5Lu34WIx2Us 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1..

    coooco.tistory.com

    풀이방법
    ① dp[i] 테이블을 생성한다 ( array[i]를 마지막 원소로 가지는 부분 수열의 최대 수열의 길이 )
    ② 점화식을 생성하면 모든 0<= j < i 에 대하여 D[i] = max( D[i] , D[i-1]+1) if array[ j  ] > array[ i ] 
    ③ 위 점화식을 활용하여서 for문으로 0부터 i-1까지 비교
    ④ 마지막에 열외해야하는 병사의 최소 수를 출력 전체 병사의 수에서 D[i]의 가장 큰 값을 빼기
    풀이방법
    ① dp[i] 테이블을 생성한다 ( array[i]를 마지막 원소로 가지는 부분 수열의 최대 수열의 길이 )
    ② array.reverse()를 사용하여 반대로 만든 후 LIS 방식으로 하기
    ③ 점화식을 생성하면 모든 0<= j < i 에 대하여 D[i] = max( D[i] , D[i-1]+1) if array[ j  ] < array[ i ] 
    ④ 위 점화식을 활용하여서 for문으로 0부터 i-1까지 비교
    ⑤ 마지막에 열외해야하는 병사의 최소 수를 출력 전체 병사의 수에서 D[i]의 가장 큰 값을 빼기

    Python(파이썬)인 경우:

    import sys
    N = int(sys.stdin.readline())
    array=list(map(int,sys.stdin.readline().split()))
    
    dp=[1]*N
    
    for i in range(0,N):
        for j in range(0,i):
            if array[i]<array[j]:
                dp[i]=max(dp[i],dp[j]+1)
    
    print(N-max(dp))
    import sys
    N = int(sys.stdin.readline())
    array=list(map(int,sys.stdin.readline().split()))
    
    #array 뒤집기
    array.reverse()
    dp=[1]*N
    
    for i in range(1,N):
        for j in range(0,i):
            if array[i]>array[j] and dp[i]<dp[j]+1:
                dp[i]=dp[j]+1
    
    print(N-max(dp))
    import sys
    N = int(sys.stdin.readline())
    array=list(map(int,sys.stdin.readline().split()))
    
    #array 뒤집기
    array.reverse()
    dp=[1]*N
    
    for i in range(1,N):
        for j in range(0,i):
            if array[i]>array[j]:
                dp[i]=max(dp[i],dp[j]+1)
    
    print(N-max(dp))

     

    Java(자바)인 경우 :

    1) 반대로 하나씩 하기

    import java.util.*;
    import java.io.*;
    
    public class Main {
        public static void main(String[] args) throws IOException{
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int N = Integer.parseInt(br.readLine());
            int[] array = new int[N];
            StringTokenizer st = new StringTokenizer(br.readLine()," ");
            for(int i=0;i<N;i++){
                array[i]=Integer.parseInt(st.nextToken());
            }
            int[] dp=new int[N];
            for(int i=N-1;i>=0;i--){
                for(int j=N-1;j>=i;j--){
                    if(array[i]>array[j] &&dp[i]<dp[j]+1){
                        dp[i]=dp[j]+1;
                    }
                }
            }
            int max=-1;
            for(int i=0;i<N;i++){
                max = dp[i]>max? dp[i]:max;
            }
            System.out.println(N-max-1);
        }
    }
    반응형

    '[백준] Python,Java로 풀기📖 > 다이나믹' 카테고리의 다른 글

    백준 2502(떡 먹는 호랑이) - Python(파이썬) - 다이나믹프로그래밍  (0) 2022.05.30
    백준 2293(동전 1) - Python(파이썬) - 다이나믹  (0) 2022.05.29
    백준 1309(동물원) - Python(파이썬),Java(자바) - 다이나믹  (0) 2022.05.28
    백준 11053( 가장 긴 증가하는 수열 ) - Python(파이썬),Java(자바)- 다이나믹(LIS)  (0) 2022.05.26
    백준 2156(포도주 시식) - 다이나믹 알고리즘  (0) 2022.05.26

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • 백준 2293(동전 1) - Python(파이썬) - 다이나믹

      백준 2293(동전 1) - Python(파이썬) - 다이나믹

      2022.05.29
    • 백준 1309(동물원) - Python(파이썬),Java(자바) - 다이나믹

      백준 1309(동물원) - Python(파이썬),Java(자바) - 다이나믹

      2022.05.28
    • 백준 11053( 가장 긴 증가하는 수열 ) - Python(파이썬),Java(자바)- 다이나믹(LIS)

      백준 11053( 가장 긴 증가하는 수열 ) - Python(파이썬),Java(자바)- 다이나믹(LIS)

      2022.05.26
    • 백준 2156(포도주 시식) - 다이나믹 알고리즘

      백준 2156(포도주 시식) - 다이나믹 알고리즘

      2022.05.26
    다른 글 더 둘러보기

    정보

    쿄코코 블로그의 첫 페이지로 이동

    쿄코코

    • 쿄코코의 첫 페이지로 이동

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (168)
      • Python (24)
        • 😈 99클럽 코테 스터디 4기 TIL (23)
        • 궁금한거 정리 (1)
      • SQL (16)
        • HackerRank (15)
      • [백준] Python,Java로 풀기📖 (71)
        • 정렬(Sorting) (6)
        • 그리디 (5)
        • 문자열 (7)
        • 수학 (3)
        • DFS&BFS (10)
        • 구현 (4)
        • 다이나믹 (17)
        • 이분탐색 (1)
        • 자료구조 (10)
        • 최단거리 (5)
        • 인덱스트리 (0)
      • [프로그래머스]Python,Java로 풀기 (6)
        • Level 1 (4)
        • Level 2 (2)
      • Study Platform📚 (25)
        • (운영체제) - 블로그 및 강의 참고 (0)
        • 김영한👨🏻‍🏫의 스프링 부트와 JPA 실무 완전 .. (5)
        • (알고리즘)- [이코테] 이것이 코딩테스트다 정리 (10)
        • 그림으로 배우는 Http&Network Basic (10)
      • 까먹을까봐 적는 것들 (4)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 백준
    • 코딩테스트준비
    • 99클럽
    • 티스토리챌린지
    • 프로그래머스
    • 오블완
    • 항해99
    • TiL

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. © 쿄코코. Designed by Fraccino.

    티스토리툴바