기본 틀 :
using System;
public class Solution {
public int solution(int n, int m, int[] section) {
int answer = 0;
return answer;
}
}
문제를 어떻게 하면 더 깔끔하고 쉽게 문제를 풀 수 있지...
고민하다가 뇌에 과부하가 온 것 같다...
풀이 1)
매개변수 section에 있는 요소를 Queue에 넣는다.
while 문을 사용해서 queue.Count != 0 아니면
queue.Dequeue()로 값을 가져온다.
그리고 다시 while문으로 queue.Count가 0보다 크고,
queue.Peek()값이 Dequeue()로 뽑은 값 + m 보다 작을 경우
계속 Dequeue()로 제거한다.
using System;
using System.Collections.Generic;
public class Solution {
public int solution(int n, int m, int[] section)
{
Queue<int> queue = new Queue<int>(section);
int count = 0;
while(queue.Count != 0)
{
int current = queue.Dequeue();
count++;
while(queue.Count > 0 &&queue.Peek() < current + m) queue.Dequeue();
}
return count;
}
}
옛날에 JavaScript로 푼 방법을 바탕으로 C# 코드를 작성해보니
풀이 2)
벽을 칠하지 않아도 되는 구간은 false, 칠해야 하는 구간을 true로
bool 타입 배열을 만든다.
반복문을 활용해 check[i]가 true이면
count를 증가시키고,
i += m - 1로 m 만큼 색칠할 수 있는 영역을 스킵하고 지나간다.
using System;
public class Solution {
public int solution(int n, int m, int[] section)
{
int count = 0;
bool[] check = new bool[n];
for(int i = 0; i < section.Length; i++)
check[section[i] - 1] = true;
for(int i = 0; i < check.Length; i++)
{
if(check[i])
{
count++;
i += m -1;
}
}
return count;
}
}
과거의 내가 지금의 나 보다 코딩을 더 잘하는 것 같다...
'문제 풀기 > C#' 카테고리의 다른 글
61. (중요)로또의 최고 순위와 최저 순위(Intersect, Union, Except) (0) | 2025.02.10 |
---|---|
60. 기사단원의 무기 (0) | 2025.02.10 |
58. 소수 만들기 (0) | 2025.02.07 |
57. 모의고사 (0) | 2025.02.07 |
56. 과일 장수 (0) | 2025.02.06 |