본문 바로가기

두두의 알고리즘

(145)
[스택] 프로그래머스 L2 '주식가격' (Python) https://programmers.co.kr/learn/courses/30/lessons/42584 코딩테스트 연습 - 주식가격 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00 programmers.co.kr prices의 길이만큼 시간이 지남 스택으로 사용할 타이머 생성 #1차시도 : 2,3,4,5,6,7,8,9,10 & 효율성테스트 실패 def solution(prices): stack = [0] answer = [0] * len(prices) for i in range(1,len(prices)): if prices[i] ..
[자료구조/알고리즘] 배열(Array)/큐(Queue)/스택(Stack) 배열 (Array) * 데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조 * 파이썬에서는 리스트 타입이 배열 기능을 제공함 [배열은 왜 필요할까?] 같은 종류의 데이터를 효율적으로 관리하기 위해 사용 같은 종류의 데이터를 순차적으로 저장 장점 빠른 접근 가능 첫 데이터의 위치에서 상대적인 위치로 데이터 접근(인덱스 번호로 접근) 단점 데이터 추가/삭제의 어려움 미리 최대 길이를 지정해야 함 큐 (Queue) [큐 구조] * 줄을 서는 행위와 유사 * 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조 - 음식점에서 가장 먼저 줄을 선 사람이 제일 먼저 음식점에 입장하는 것과 동일 - FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방..
[탐욕법] 프로그래머스 L1 '체육복' (Python) https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 체육복을 잃어버린 학생이 여벌의 체육복이 있을 수 있다는 조건을 생각해야 함 1번의 학생이 있다면 lost와 reserve에 있는 학생 번호를 지움 체육수업을 들을 수 있는 학생을 구해야 하므로, 체육복을 잃어버린 학생 수를 제외하고 결괏값을 도출 (set 또는 for문을 사용할 수 있다) 주어진 배열이 정렬되어있지 않을 수 있으므로 정렬 여벌의 체육복을 가진 학..
[탐욕법] 난이도1, 2019 국가 교육기관 코딩 테스트 '큰 수의 법칙' (Python) '큰 수의 법칙'은 일반적으로 통계 분야에서 다루어지는 내용이지만 동빈이는 본인만의 방식으로 다르게 사용하고 있다. 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때 주어진 수들을 M번 더하여 가장 큰 수를 만드는 방법이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어 순서대로 2, 4, 5, 4, 6으로 이루어진 배열이 있을 때, M이 8이고 K가 3이라고 가정하자. 이 경우 특정한 인덱스의 수가 연속해서 세 번까지만 더해질 수 있으므로 큰 수의 법칙에 따른 결과는 6 + 6 + 6 + 5 + 6 + 6 + 6 + 5인 46이 된다. 단, 서로 다른 인덱스에 해당하는 수가 같은 경우에도 서로 다른 것으로 간..
[알고리즘] 탐욕법 / 그리디(Greedy) 탐욕법이란? 전체가 아닌 현재 상태에서 최선의 선택을 하는 알고리즘 전체 탐색보다 빠르지만 반드시 정답을 도출하지 않는다 탐욕법의 조건 각 부분에서의 선택이 다른 부분에게 영향을 주지 않는다 각 부분에서의 최적 해결이 최종 해결방법이다 주의사항 탐욕법이 적용 가능한 문제인지 아닌지를 판별할 수 있어야 한다. 대부분의 그리디 알고리즘 문제에서는 문제 풀이를 위한 최소한의 아이디어를 떠올리고 이것이 정당한지 검토할 수 있어야 답을 도출할 수 있다. 어떤 코딩 테스트 문제를 만났을 때, 바로 문제 유형을 파악하기 어렵다면 그리디 알고리즘을 의심하고, 만약 오랜 시간을 고민해도 그리디 알고리즘으로 해결 방법을 찾을 수 없다면, 다이내믹 프로그래밍이나 그래프 알고리즘 등으로 문제를 해결할 수 있는지 재차 고민해보..
[정렬] 프로그래머스 L1 '실패율' (Python) https://programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스 programmers.co.kr python 배열의 count() 함수를 이용하여 계산해야겠다고 생각 실패율을 기준으로 내림차순 정렬하되, 출력은 스테이지 번호를 출력하라 했으므로 dict() 사용 스테이지에 도달한 플레이어 수는 스테이지가 올라갈수록 그 전의 모든 플레이어 수가 없어지므로 total 변수 사용 ZeroDivisonError를 대비하여 try/except 구문 처리 #1차시도 ..
[정렬] 난이도1, 백준 18310번 '안테나' (Python) https://www.acmicpc.net/problem/18310 18310번: 안테나 첫째 줄에 집의 수 N이 자연수로 주어진다. (1≤N≤200,000) 둘째 줄에 N채의 집에 위치가 공백을 기준으로 구분되어 1이상 100,000이하의 자연수로 주어진다. www.acmicpc.net 집의 위치가 정렬되어 있지 않으므로 정렬 정렬 후 배열의 중앙값에 안테나를 설치했을 때 거리의 총합이 최소가 됨 집의 개수를 반으로 나누면 중앙값이 나옴. 단, 배열은 0부터 시작하므로 1을 빼줌 '''입력예시 4 5 1 7 9 ''' n = int(input()) house = list(map(int,input().split())) house.sort() print(house[(n-1)//2]) 필요 없이 주어지는 입..
[정렬] 백준 10825번 '국영수' (Python) https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1 www.acmicpc.net 학생 수가 100,000 이하이므로 효율적으로 값을 처리하기 위해 입력 값을 sys 라이브러리 사용 이름과 성적들이 짝을 이루기 때문에 dict 사용 정렬 조건이 여러 개이므로, 요구하는 조건 반대 순서대로 정렬 처리 '''입력예시 12 Junkyu 50 60 100 Sangkeun 80 60 50 Sunyoung 80 70 100 Soong 50 60 90 Haebin 50..

LIST