C#/알고리즘 문제 풀기 썸네일형 리스트형 프로그레머스 - 프로세스 우선순위 (Queue) 이번 문제는 Queue 의 기본적인 개념을 확인하는 문제이다.선입 선출의 특성을 가진 Queue는 Enqueue() 를 사용하면 가장 마지막에 해당 값을 넣어주고, Dequeue() 를 통해 가장 먼저 들어간 값을 뺄 수 있는 구조를 가졌으며, List 나 배열과 비교하여 사용 가능한 메서드가 적은 대신 읽기 속도가 매우 빠르다. 이 문제는 아래와 같은 인자값, 리턴값 을 다루게 된다.priorities : 우선순위가 담긴 배열location : priorities 배열의 인덱스 (0부터 시작)answer : location 위치의 문서가 몇 번째로 인쇄되는지 (1부터 시작) 이 문제를 보았을때 당장 드는 생각은, 각 배열의 값들을 Queue 를 사용하여 빠르게 순회하며, 조건 만족시 최대값은 우선순위.. 더보기 프로그래머스 - 조건에 맞는 수열 (컬렉션 비교 메서드, SequenceEqual) 이번 문제는 간단한 수열을 이용하여, 배열의 기본적인 특성을 이해하고 있는지 체크하는 문제이다. 이번 문제를 풀기 위해서는 배열이 가지는 몇 가지 특성을 알고 있어야 한다.먼저 1. 배열은 기본적으로 참조형이다, 따라서 이전의 값을 가지는 배열을 만들기 위해서는 단순히arr = arr2 가 아니라 arr2 = (int[])arr.Clone(); 이러한 방식으로 받아와야 하며, 이때 내부의 값이 int 형이기 때문에 값 형식처럼 작동한다. 2. 두개의 IEnumerable 컬렉션의 내용을 비교할 수 있는 메서드 => SequenceEqual(); 의 존재list 나 array와 같은 컬렉션의 값 형식 또는 참조 형식 상태에서의 비교 시 용이하게 사용가능한 LINQ 확장 메서드가 존재한다. 이 두가지 정보를.. 더보기 프로그래머스 - n^2 배열 자르기 n^2 배열 자르기 라는 n * n 크기의 배열에서의 규칙성을 찾아서 특정 인덱스 부분을 추출해 내는 문제이다. 해당 문제를 봤을때 당장 드는 생각은 크게 2가지 방법이다. 1. n * n 크기의 2차원 행열을 단순히 n 크기만큼 잘라내기 + 다 이어 붙히기 >> 연산속도가 매우 느릴것 같다.2. left 와 right 의 크기에 따라 행과 열의 위치를 유추해서 딱 해당 부분만 이어 붙히기 이렇게 2가지 방법이 생각나지만, 1번의 경우 left 와 right 가 최대 n^2 까지 늘어나고 이는 10^14 까지 된다는 뜻이기에 단순히 늘리고 각 행을 잘라내어 하나하나 붙히는 작업은 시간복잡도를 고려했을때 오답일 가능성이 높다. 따라서 2번 방식으로, n * n 배열에서의 index 번호에 따른 규칙을 찾.. 더보기 프로그래머스 - 소수 찾기 기본적인 1 ~ n 사이의 소수의 개수를 찾는 문제이다.이건 아주 유명한 알고리즘으로 에라토스테네스의 체 방식을 사용하여 문제를 푸는게 일반적이다. 정확히는 n 까지 처음부터 하나씩 확인 하며 m 의 배수인지를 확인하며 마지막 값 까지 지워 나간 뒤 확인하는 방식으로 아래와 같이 간단히, bool 값을 부여하고, for문으로 j 만큼의 배수 값인지를 매번 확인하여 false 를 부여하는 방식으로 구현하여 구간내의 소수값 총 개수를 구하였다. public int solution(int n){ // 에라토스 체 알고리즘 if (n 더보기 프로그래머스 - 혼자서 하는 틱택토 이번 문제는 혼자서 틱택토를 할 때 일어나는 실수와 관련된 여러 경우의 수를 따지고, 나올수 있는 경우의 수인지 실수를 하여 잘못된 경우의 수가 발생 하였는지 를 확인하는 문제이다. 구체적인 알고리즘을 사용한다기 보다는, 기본적인 형식을 만들고, 각 경우의 수에 따른 예외처리를 진행하는 방식으로 진행하면 될것 같았다. 먼저 승리 여부를 중심으로 여러 경우의 수를 나누었다. public bool IsWin(char[,] board, char player){ for (int i = 0; i 그리고 기본적인 board의 2차원 배열을 만들고이에 따른 각 조건들의 예외처리를 진행하는 방식으로 solution 함수를 만들었다 조건모든 칸이 비어있음 == 시작하지 않음 => 가능한 조건X의 .. 더보기 프로그래머스 - k 번째 수 이번 문제는 간단한 난이도의 배열을 자르고 정렬하고 순서를 찾는 문제이다.아주 기초적인 내용이며, 단순히 일전 언급했던 substring() 과 비슷한 기능을 배열에서 사용할때의 방식을 언급하고 싶었다.https://toacode.tistory.com/57 프로그래머스 - 문자열 나누기문자열 나누기 문제를 받았다. 문자열을 빼는 문제들의 경우 대부분 Substring 메서드를 사용하여 풀어나간다. https://gent.tistory.com/502 [C#] 문자열 자르기 방법 (Substring, Split)씨샵(C#)에서 문자열을 자toacode.tistory.com public int[] solution(int[] array, int[,] commands){ int count = comma.. 더보기 프로그래머스 - 완전 탐색 (카펫) 이번 문제는 완전 탐색형식의 문제로, 답을 구함에 있어서의 방식은 명확하나, 시간 복잡도를 고려해서 답을 구하는 방식을 얼마나 최적화 할 수 있는지가 관건인 형식이다. 먼저 가장 직관적으로 형태를 만들어 보았다. public int[] solution1(int brown, int yellow){ int[] answer = new int[] { }; int a = yellow + 3; for(int w = 3; w w * h = Brown + Yellow 이며, w,h는 3이상이 되어야 조건이 성립한다.물론 위의 방식을 그대로 사용하면 경우의 수가 커질때 이중 for문의 시간 복잡도가 높아져 시간이 초과하게된다. 따라서 for문 자체의 부하는 줄이는 방식으로 경우의 수를 쪼개.. 더보기 프로그래머스 - 신고 결과 받기 이번 문제는 유저 간의 신고와 이에 대한 피드백 문제이다. 대부분의 데이터가 서로 페어로 연결이 되어있고, 한쪽의 데이터가 많이 저장되는 경우가 있다 보니, 데이터를 저장하고 불러오는 방식을 Dictionary 형태로 설계해야겠다고 생각했다.그리고 그중 value 값을 List 형식으로 받아 한 명의 유저가 여러 명을 신고한 경우 다 저장이 가능하도록 하였다. public int[] solution(string[] id_list, string[] report, int k){ int[] answer = new int[] { }; answer = new int[id_list.Length]; // 신고자 수 만큼 배열 생성 Dictionary> reportMap = new Diction.. 더보기 이전 1 2 다음