프로그래밍/알고리즘
LeetCode 23.08.16 : Sliding Window Maximum
LeetCode 23.08.16 : Sliding Window Maximum
2023.08.17https://leetcode.com/problems/sliding-window-maximum/ 풀이 - 보자마자 이중 for문? 생각했지만 제한조건에 nums.length가 10의 5승인 걸 보고 그만둠. - 우선순위 큐로 최초 k 사이즈만큼의 num들을 정렬해놓고, 다음 k + index에 위치한 숫자를 EnQueue하는 방식으로 생각. - 우선순위 큐 검색 도중 window 안에 들어와있는 값이 아니면 삭제해보도록 하자. - 닷넷에는 이미 구현된 PriorityQueue가 있다. public class IntMaxCompare : IComparer { public int Compare(int x, int y) => y.CompareTo(x); } static int[] Solution(int[] n..
프로그래머스/위클리 챌린지/최소직사각형
프로그래머스/위클리 챌린지/최소직사각형
2021.09.27https://programmers.co.kr/learn/courses/30/lessons/86491 풀이 - 모든 명함이 들어갈 수 있는 가장 작은 지갑을 만들어야 한다 - 명함을 회전시켜서 넣을 수도 있다 - 지갑의 크기를 출력해라 - 그냥 최대값을 구하는 문제인데, 회전 가능한 부분만 고려하면 된다 - 명함들을 긴 쪽을 가로, 짧은 쪽을 세로로 보이도록 회전했다 - 가로와 세로의 최대값을 구해 곱하면 된다 C# using System; public class Solution { public int solution(int[,] sizes) { int width = 0; int height = 0; for(int i=0; i temp.t1) { //Swap int t3 = temp.t1; temp.t1..
프로그래머스/위클리 챌린지/입실 퇴실
프로그래머스/위클리 챌린지/입실 퇴실
2021.09.23https://programmers.co.kr/learn/courses/30/lessons/86048 풀이 - 입실, 퇴실 순서 배열이 주어진다 - 입실과 퇴실의 시간은 기록되어 있지 않으며, 입실/퇴실이 동시에 이뤄지는 경우는 없다 - 각 사람 별로 반드시 만난 사람 수를 반환해야 한다 - 규칙 찾느라 좀 헤맸는데, 아래와 같이 풀었다. C# using System; using System.Linq; using System.Collections.Generic; public class Solution { public int[] solution(int[] enter, int[] leave) { var interSect = new List(); var answerHash = new Dictionary(); ..
프로그래머스/위클리 챌린지/복서 정렬하기
프로그래머스/위클리 챌린지/복서 정렬하기
2021.09.06https://programmers.co.kr/learn/courses/30/lessons/85002 풀이 - 강한 복서 순서대로 정렬하는 문제 - 복서의 번호, 전적, 몸무게 값이 입력되어 들어옴 - 승률이 높은 순서, 같다면 체급이 높은 쪽을 이긴 횟수, 같다면 체급이 높은 쪽, 같다면 번호가 빠른 쪽 순서로 정렬해야 함 - 하하 Linq 쓸거야 하하 C# using System; using System.Linq; public class Solution { public static Boxer[] Boxers; public int[] solution(int[] weights, string[] head2head) { Boxers = new Boxer[weights.Length]; for(int i=0; ..
프로그래머스/위클리 챌린지/모음 사전
프로그래머스/위클리 챌린지/모음 사전
2021.08.31https://programmers.co.kr/learn/courses/30/lessons/84512 풀이 - A, E, I, O, U만을 사용해 만들 수 있는 길이 5 이하의 모든 단어가 수록된 사전 - 사전 첫 단어는 A, 그 다음이 AA, 마지막이 UUUUU - 단어 하나가 주어지면 사전의 몇 번째 단어인지 return - "A"는 "10000"으로 생각하면 편하다 - 사전은 이 숫자들을 오름차순으로 정렬했다고 보면 된다 - 예를 들어, A => 10000, AA => 11000, UEI => 52300이다. - 10000부터 55555까지 모든 가능성을 돌리면서, 주어진 단어가 발견되면 해당 횟수를 리턴하면 되겠다 C# using System; using System.Linq; public cla..
프로그래머스/위클리 챌린지/직업군 추천하기
프로그래머스/위클리 챌린지/직업군 추천하기
2021.08.24https://programmers.co.kr/learn/courses/30/lessons/84325 풀이 - 사용 언어와 선호도를 입력하면 적절한 직군을 알려 주는 프로그램 - 주어진 table을 잘 split하는 게 핵심인듯 - 총합이 같은 직군이면 알파벳순으로 빠른 것을 출력한다 - 알파벳순은 SortedDictionary로 해결해야겠다 - 또다시 푸는 방법을 알려준 문제라 큰 고민은 없음 C# using System; using System.Collections.Generic; using System.Linq; public class Solution { public string solution(string[] table, string[] languages, int[] preference) { va..
프로그래머스/위클리 챌린지/퍼즐 조각 채우기
프로그래머스/위클리 챌린지/퍼즐 조각 채우기
2021.08.18https://programmers.co.kr/learn/courses/30/lessons/84021 풀이 - 보드 빈칸에 회전시킬 수 있는 조각을 채워넣어야 한다 - 최대한 많은 조각을 채워넣고, 몇 칸을 채웠는지 출력하면 된다 - 보드에 어떤 위치에 조각이 들어있는지는 상관 없다. 모양이 맞기만 하면 되는거라 "빈 칸"과 "조각들"만 구분하면 된다. - 해당 빈 칸과 같은 모양의 조각이 있는지 회전해가며 찾으면 된다. - 어려운 부분은 "조각을 골라내기"이다. 1) 조각을 골라내는 방식 정하기 조각을 떼어내려면 각 칸의 연결성을 알아내야 한다. 나는 맨 첫번째 칸부터 시작해서 우측으로 이동하며 연결성을 알아보기로 했다. 이 경우 좌측, 상단의 칸만 조사하면 되기 때문이었다. 다만, 우측으로 연결되었음..
프로그래머스/스택・큐/주식가격
프로그래머스/스택・큐/주식가격
2021.08.13https://programmers.co.kr/learn/courses/30/lessons/42584 풀이 - 주식 가격이 담긴 배열이 주어짐 - 가격이 떨어지지 않은 기간은 몇 초? - 각 배열 원소 모두에 가격이 떨어지지 않은 기간을 돌려야 한다 - 이게 왜 스택/큐인지 딱히 모르겠음 - 이중 포문 돌려서 미래의 시간이랑 비교하여 떨어지지 않았다면 결과값에 더하면 되는 것 아닌가...? - 마지막까지 가격이 떨어지지 않은 경우, 전체 시간 길이를 고려하면 될듯 C# using System; public class Solution { public int[] solution(int[] prices) { int[] answer = new int[prices.Length]; for(int i=0; i
프로그래머스/스택・큐/다리를 지나는 트럭
프로그래머스/스택・큐/다리를 지나는 트럭
2021.08.13https://programmers.co.kr/learn/courses/30/lessons/42583 풀이 - 정해진 순서로 모든 트럭이 다리를 건너려면 최소 몇 초인가 - 다리에는 최대 트럭 개수와 최대 하중이 있다 - 완전히 오르지 않은 트럭 무게는 무시 - int 배열형으로 다리의 상태를 표시하자 - Aging 할 때마다 맨 앞은 DeQueue하고 각 배열 원소를 앞으로 이동한다 - 맨 뒤 배열 원소를 0으로 만든다 - 트럭을 올릴 수 있는지 없는지 판단한 뒤 트럭을 올리자 C# using System; using System.Collections.Generic; using System.Linq; public class Solution { public int solution(int bridge_le..
프로그래머스/스택・큐/프린터
프로그래머스/스택・큐/프린터
2021.08.12https://programmers.co.kr/learn/courses/30/lessons/42587 풀이 - 중요도 높은 것 먼저 인쇄 - 대기목록 가장 앞에 있는 문서 꺼내기 - 그러나 중요도가 그거보다 높은 문서가 리스트에 있다? - 그러면 고걸 다시 대기목록에 집어넣음 - 내가 인쇄 요청한 문서가 몇번째에 인쇄되는지 return - 관건은 중요도가 같은 경우로군 오케이 - 문제에서 사실상 구현 방법을 정해줬으니 그대로 해 보자 C# using System; using System.Collections.Generic; using System.Linq; public class Solution { public int solution(int[] priorities, int location) { var W..
프로그래머스/스택・큐/기능개발
프로그래머스/스택・큐/기능개발
2021.08.10https://programmers.co.kr/learn/courses/30/lessons/42586 풀이 - 각 기능의 개발 속도는 다름 - 그러나 앞 기능이 먼저 배포되어야 뒤의 기능이 배포될 수 있다 - 배포는 하루에 한 번만 가능. 하루의 끝에 이루어진다 - 각 배포마다 몇 개의 기능이 배포되는지 return 할 것 - TaskList 객체에 List로 큐를 만들고, 그 안에 Task 객체를 넣는다 - Task 객체의 Do()는 현재 progress를 갱신시킨다 - Task 객체의 isDone은 progress가 100 이상인지 알린다 - 큐의 앞부터 반복하여 isDone이 true인지 체크, 맞다면 해당 객체를 Remove한다 C# using System; using System.Linq; us..
프로그래머스/위클리 챌린지/상호 평가
프로그래머스/위클리 챌린지/상호 평가
2021.08.10https://programmers.co.kr/learn/courses/30/lessons/83201 풀이 - 문제의 나는 학점을 뿌리는 교수이다 그러나 상호평가인 - 학생은 자기 자신에게 점수를 부여할 수도 있다 (...) - 그런데 자기 평가 점수가 최고점이거나 최저점이면 해당 점수는 제외하고 평균을 냄 - 그리고 점수대별로 학점 A/B/C/D/F를 나눈다 이걸 문자열로 리턴하면 된다 - 이번 문제도 썩 쉽다 그러니까 코드를 읽기 쉽게 만드는 것에 중점을 둬보겠다 C# using System; using System.Collections.Generic; using System.Linq; public class Solution { public string solution(int[,] scores) { ..