분류 전체보기 266

[백준] 퇴사 14501번 (C++)

출처 : 14501번: 퇴사 (acmicpc.net) 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 풀이 방법 일을 할지 안 할지 선택하면 되는 dp 문제이다 문제의 입력을 받은데로 인덱스가 시작일 이므로 문제는 간단하다 다음 날 일을 시작하면 p[day]+Money(day + t[day]) 그냥 넘기려면 Money(day+1)을 해주어서 둘 중 max를 선택하면 된다. #include #include #include using namespace std; const int MAX = 15 + 1; const int INF = 987654321; int N; int cache[MAX]; int t[MAX]; int p[MAX]; int Money(..

Algorithm 2021.03.24

[백준] 회문 17609번 (c++)

출처 : 17609번: 회문 (acmicpc.net) 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 풀이 방법 회문을 판별하는 알고리즘은 쉽게 생각해 낼 수 있다. 하지만 유사회문을 판별을 하는데 조금 생각을 해야 한다. 유사회문은 한 알파벳을 제거했을 때 회문이 되면 유사회문이라고 한다 여기서 유사회문을 판별하는 방법은 문자열을 처음과 끝에서부터 비교해 오면서 다른 문자가 나올 때 앞쪽 문자를 버릴지 뒤쪽 문자열을 버릴지 판별해주면 된다. 앞쪽 문자를 버리는 경우는 앞쪽 인덱스를 한 칸뒤로 보낸 뒤 뒤쪽문자와 같으면 isPalin함수를 ..

Algorithm 2021.02.28

배열에서 인덱스와 값을 동시에 가져오는 방법

enumerate 인덱스의 번호와 배열의 값을 tuple형태로 반환한다 test = [5, 4, 3, 2, 1] for t in enumerate(test): print(t) #출력 (0, 5) (1, 4) (2, 3) (3, 2) (4, 1) tuple 형태로 반환을 하므로 for 문을 통해 인덱스와 배열의 값을 한 번에 들고 올 수 있다 for index, value in enumerate(test): print("index: {0} value: {1}".format(index, value)) #출력 index: 0 value:5 index: 1 value:4 index: 2 value:3 index: 3 value:2 index: 4 value:1

파이썬 문법 2021.02.27

[프로그래머스] 문자열 내 마음대로 정렬하기

출처 : 코딩테스트 연습 - 문자열 내 마음대로 정렬하기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 문자열 내 마음대로 정렬하기 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1 programmers.co.kr 풀이 방법 lambda 함수를 사용하여 정렬을 하면 간단하게 풀이할 수 있다. 같은 문자가 2개 이상이면 같은 문자를 가지는 단어끼리는 사전 순으로 앞선 문자열이 앞쪽에 위치하도록 해야 하는데 이런 경우를 해결하기 위해 미리 lambda 함수를 사용 전 사전 순으로 정렬을 한 후 lambda ..

Algorithm 2021.02.24

[프로그래머스] 주식가격 (python)

출처 : 코딩테스트 연습 - 주식가격 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr 풀이 방법 이중 for 문으로 0번 인덱스 부터 자신보다 작은 값이 나올 때까지 for 문을 돌며 작은 값이 나오면 정답에 추가해주는 방식의 간단한 방법으로 풀었다. def solution(prices): answer = [0] * len(prices) for i in range(len(prices)-1): for j in range..

Algorithm 2021.02.23

[algostop] 고대어 사전 (c++)

출처 : algospot.com :: DICTIONARY algospot.com :: DICTIONARY 고대어 사전 문제 정보 문제 아마추어 고고학자인 일리노이 존스는 시카고 근교에서 고대 문명의 흔적을 찾아냈습니다. 그 흔적 중에는 이 언어의 사전도 포함되어 있었는데, 이 사전에 포함된 www.algospot.com 풀이 방법 각 단어를 비교해가며 먼저 나온 단어랑 바로 뒤에 나온 단어랑 앞글자 부터 비교해 가며 다른 글자가 나올시 앞 단어의 철자에서 뒤 단어의 철자로 가는 간선을 추가해주는 작업을 해서 그래프를 만든다. 그리고 위상 정렬을 이용해야 한다 위상정렬은 dfs에서 마지막에 재귀호출이 끝날 때 현재 지점을 반환해주면서 마지막에 반환된 값을 뒤집어 주면 된다. 만약 그래프가 DAG가 아니라면..

Algorithm 2021.02.22

[algospot] 변화하는 중간 값 (c++)

출처 : algospot.com :: RUNNINGMEDIAN algospot.com :: RUNNINGMEDIAN 변화하는 중간값 문제 정보 문제 한 수열의 중간값(median)은 이 수열을 정렬했을 때 가운데 오는 값입니다. 예를 들어 {3,1,5,4,2}를 정렬했을 때 가운데 오는 값은 3이지요. 수열의 길이가 짝수일 때 www.algospot.com 풀이 방법 문제의 핵심은 우선순위 큐를 두개를 이용하여 중간 값을 찾는 것이다. 하나는 최대 힙 하나는 최소 힙으 이용하여 최대 힙의 최대 원소가 최소 힙의 최소 원소보다 작거나 같게 만들고, 최대 힙의 원소 개수가 최소 힙의 원소 개수 보다 +1 크거나 같게 유지시켜주며 원소를 삽입시키면 중간 값은 최대 힙의 최댓값이 될 것이다. #include #..

Algorithm 2021.02.15