본문 바로가기

Algorithm14

backjoon 11055: 가장 큰 증가 부분 수열 https://www.acmicpc.net/problem/11055 11055번: 가장 큰 증가 부분 수열 수열 A가 주어졌을 때, 그 수열의 증가 부분 수열 중에서 합이 가장 큰 것을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {1, 100, 2, 50, 60, 3, 5, 6, 7, 8} 인 경우에 합이 가장 큰 증가 부분 수 www.acmicpc.net dp를 이용한 문제.. dp개념을 잘 이해하지 못한 나에겐 조금 힘든 문제였다.. n=int(input()) arr=list(map(int, input().split())) result = [1]*n result[0] = arr[0] for i in range(1,n): for j in range(i): if arr[i] > arr[j]:.. 2022. 5. 19.
backjoon 2469: 사다리 타기 https://www.acmicpc.net/problem/2469 2469번: 사다리 타기 첫 줄에는 참가한 사람의 수 k가 나온다(3 ≤ k ≤ 26). 그 다음 줄에는 가로 막대가 놓일 전체 가로 줄의 수를 나타내는 n이 나온다(3 ≤ n ≤ 1,000). 그리고 세 번째 줄에는 사다리를 타고 난 후 결정 www.acmicpc.net 로직을 간단하게 설명 하자면, 1. 시작하는 알파벳과 도착한 알파벳이 ?로 되어있는 배열에 맞닿을 때 까지 움직인다. 2. 맞닿았을 때 서로 한칸차이가 난다면 "-", 서로 차이가 나지 않는다면 "*", 서로 두칸이상 차이가 난다면 "x"*n개 만큼 출력이 되게 한다. ABC=['A','B','C','D','E','F','G','H','I','J','K','L','M',.. 2022. 5. 17.
baekjoon 2589: 보물섬 https://www.acmicpc.net/problem/2589 2589번: 보물섬 보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서 www.acmicpc.net bfs와 브루스포스 알고리즘으로 한칸씩 육지를 밟을때 시간을 체크해준다. 하나의 섬(?)에서 최단거리측정하는 방식으로 최대거리를 구하면 된다. #문제에 설명이 잘 되어있습니다ㅎㅎ. 그렇다면 코드는 from collections import deque n, m = list(map(int,input().split())) arr = [list(input())for _ in range(n)] lst = [[.. 2022. 4. 26.
너비우선탐색(bfs) bfs는 최솟값, 최소거리등. level을 깊히 돡전 branch를 전부 돌며 값을 도출하는 방법이다. # bfs꼴 def bfs(st): q = [] q.append(st) while q: now = q.pop(0) ~~ #값을 도출하기 위한 코드를 작성 ~~ q.append(x) # x는 다음 now가 되기 위해 q에 append된다. 2022. 4. 16.
깊이우선탐색(dfs) branch와 level이 정해져 있다면 사용하는 것이 좋다(재귀를 사용하기 때문) --> 문제설계시, 방향, 배열범위, dfs를 몇번타는지를 확인하고 설계하는게 좋다. #dfs 꼴 def dfs(level): #(깊이가 깊고 branch가 많다면 이곳에 back tracking용 if문을 사용하는 것이 좋다.) if level ==n: # (도출할 값을 만드는 코드가 이곳에 들어감) return for i in range(len(arr)): dfs(level+1) # 재귀로 깊이우선탐색을 함. dfs(0) 2022. 4. 16.
그리디 알고리즘(greedy) 그리디 알고리즘이란 내게 주어진 정보에서 뒷일을 생각안하고 지금 당장 이득을 취할 수 있는것을 택하여 문제를 해결하는 방법이다. 윗말은 ssafy교육을 들으며 정리한 개념이고, 사실 우리가 알고리즘을 배우는대엔 문제에 적용하는 능력을 기르기위해 배운다고 생각한다. 고로 나만의 생각으로 정리를 해보자면 greedy로 풀수 있는지 없는지 판단하는게 중요! ex) 동전교환 문제 but 동전이 서로 배수관계일때만 사용할 수있다. 그리고 시간이나 횟수로 나오는 문제의 최대횟수, 최소동전갯수등을 구할때 유용하게 사용될 수 있다. 입력된 데이터를 sort해서 greedy의 형태로 풀 수 있는지 확인해보기 시간복잡도: O(k) 여기서 k는 문제마다 다르지만 예시로 드는 문제로 치면 동전의 종류가 될 것이다. 위의 글을.. 2022. 4. 14.