본문 바로가기

제로부터 C# 코딩테스트

(10)
LeetCord - 300.Longest Increasing Subsequence 순서. 이중포문을 사용한 해결. 이진탐색을 사용한 해결. 1. 주어진 배열의 길이만큼의 DP 배열을 생성하고, 모든 요소를 1로 초기화합니다. 2. 이중 포문을 사용하여 배열이 순차적으로 증가하는 부분 수열의 정보를 DP에 기록합니다. 내부 포문에서는 현재 요소(nums[i])와 이전 요소(nums[j])를 비교하여, 현재 요소가 더 큰 경우에만 DP 값을 갱신합니다. dp[i] 값은 dp[j] + 1과 비교하여 더 큰 값을 선택합니다. 모든 요소에 대해 반복하면서 최대 부분 수열의 길이를 업데이트해나갑니다. public class Solution { public int LengthOfLIS(int[] nums) { int[] dp = new int[nums.Length]; int answer = 1; ..
LeetCord - 733. Flood Fill 이미지는 m x n 크기의 정수 그리드인 image로 표현됩니다. image[i][j]는 이미지의 픽셀 값입니다. 또한 세 개의 정수 sr, sc, color가 제공됩니다. 이미지[sr][sc]에서 시작하여 이미지에 대해 flood fill 작업을 수행해야 합니다. flood fill을 수행하기 위해서는 시작 픽셀과 동일한 색상을 가진 시작 픽셀과 4방향으로 연결된 모든 픽셀, 그리고 그 픽셀들과 4방향으로 연결된 모든 픽셀들(또한 같은 색상)을 고려합니다. 이들 모든 픽셀의 색상을 color로 바꿉니다. flood fill을 수행한 후 수정된 이미지를 반환합니다. 1. BFS 탐색 준비하기 상하좌우 이동방향이 들어있는 배열을 만듭니다. 방문처리할 image의 크기만큼 bool 배열을 만듭니다. 시작지점..
LeetCord - 84. Largest Rectangle in Histogram 주어진 배열 heights는 히스토그램의 막대 높이를 나타내는 정수들로 구성되어 있습니다. 각 막대의 너비는 1로 가정하고, 히스토그램에서 가장 큰 직사각형의 넓이를 반환하는 문제 입니다. https://www.algotree.org/algorithms/stack_based/largest_rectangle_in_histogram/ Finding the Largest Area Rectangle In A Histogram :: AlgoTree Finding the Largest Area Rectangle In A Histogram Histogram is nothing but a graphical representation of data using columns or bars of different heigh..
프로그래머스 - 신고 결과 받기 문제 요약. 유저가 다른 유저를 신고했을때, 신고 당한 횟수가 정지 기준 이상이 되면 신고한 유저에게 처리 결과 메일을 보냅니다. 각 유저가 받은 메일의 수를 구하는 문제 입니다. 1. 유저 클래스를 만듭니다. public class User { public List report; public List reported; int receivedCount; public User() { report = new List(); //신고함 reported = new List(); //신고당함 receivedCount = 0; } //---------------------------------------신고 처리 public void AddReport(string userName){ report.Add(userNam..
프로그래머스 소수 만들기 주어진 숫자 배열이 주어지고, 중복되지 않은 숫자 3개를 선택해 소수를 만들때 만들 수 있는 소수의 개수를 구하는 문제. 위 문제에서는 nums의 배열이 50이 최대기 때문에 간단하게 풀 수 있는 문제. 주어진 숫자 3개를 더했을 때 나올 수 있는 가짓수를 구한다면 포문 하나로도 풀 수 있을 것입니다. 보통 조합을 구하는 공식은 nCr로, 0부터 100까지 중복되지 않은 3개의 숫자를 선택하여 더할 때, C(100, 3) = 100! / (3! * (100-3)!) = 100 * 99 * 98 / (3 * 2 * 1) = 161,700 가지가 나옵니다. using System; class Solution { public int solution(int[] nums) { int answer = 0; for(..
프로그래머스 - 정수를 나선형으로 배치하기 주어진 n으로 n*n의 배열을 나선형으로 배치한 이차원 배열을 만드는 문제. 1. 방문처리할 배열을 만듭니다. 2. 이동경로 (4가지방향)을 가지고있는 이차원 배열을 만듭니다.(경로는 오른쪽,아래,왼쪽,위 순으로 이동할 것) 3. 나선형으로 n*n 숫자까지 반복 할 것이기 때문에 listIdx를 만들어줍니다.(경로를 바꿀때마다 ++, 경로의 인덱스를 넘길시 %4) 4. n*n 숫자까지 모두 채울 때 가지 반복할 것이기 때문에 while문을 만들어 줍니다. 5. 조건으로 다음으로 이동할 배열이 이차원 배열을 넘어가지 않으면서 방문하지 않았으면 다음으로 이동할 배열에 현재배열 ++ 해주고 방문 처리를 해준뒤 다음으로 이동할 배열위치를 List에 담아줍니다. 조건에 해당 되지않았을 경우는 경로를 바꿔주야 함으..
프로그래머스 - 안전지대 폭탄 주변을 폭탄 위험 지역으로 바꾼 뒤 안전지역 칸수를 구하는 문제. 1. 폭탄 주변을 폭탄 위험지역으로 바꾸기 위한 함수 만들기. 2. 새로운 board 판을 만들기. - 기존 보드판 그대로 사용하면 보드판 순회 도중 보드판이 업데이트 되기때문에 문제가 생길 수 있음. 3. board 판을 순회하면서 폭탄을 발견하면 위에 만든 함수 실행. using System; public class Solution { public int solution(int[,] board) { int answer = 0; int[,] newBoard = new int[board.GetLength(0), board.GetLength(1)]; for(int i = 0 ; i< board.GetLength(0);i++){ for(..
프로그래머스 - 저주의 숫자 3 주어지는 숫자 n을 숫자 3 또는 3의 배수를 사용하지 않는 마을의 숫자로 변환하는 문제. .ToString().Contains("") using System; public class Solution { public int solution(int n) { int answer = 0; for(int i = 1; i