반응형
🔍 문제 요약
https://school.programmers.co.kr/learn/courses/30/lessons/42840
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
수포자 3명이 문제를 찍는 규칙이 정해져 있고, 답안 answers가 인자로 주어질 때 최대 점수를 맞은 번호들을 반환하는 문제
🧠 나의 접근 방식과 시행착오
대강 15분 정도 걸린 문제. 풀이자체는 규칙을 그대로 int[]로 저장해두고 정답지를 순회하면서 각 번호별로 점수를 저장해두고, 최대 점수인 번호들을 저장하고 올림차순으로 Sort시키는 방식으로 풀었다. 문제의 풀이 자체는 단순하게 직관적으로 푼 거라 더 효율적인 방향이 있을지는 체크를 해봐야 할 듯 함.
using System;
using System.Collections.Generic;
public class Solution
{
/// <summary>
/// 모의고사
/// https://school.programmers.co.kr/learn/courses/30/lessons/42840
/// </summary>
public int[] solution(int[] answers)
{
List<int> maxScoreList = new List<int>();
// 1번 수포자 규칙 : 1,2,3,4,5, ....
// 2번 수포자 규칙 : 2,1,2,3,2,4,2,5, ...
// 3번 수포자 규칙 : 3,3,1,1,2,2,4,4,5,5, ...
int[] scoreArray = new int[3];
int[] oneAnswer = new int[] { 1, 2, 3, 4, 5 };
int[] twoAnswer = new int[] { 2, 1, 2, 3, 2, 4, 2, 5 };
int[] threeAnswer = new int[] { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 };
for (int i = 0; i < answers.Length; i++)
{
int answer = answers[i];
// 1번 체크
int oneIdx = i % oneAnswer.Length;
if (oneAnswer[oneIdx] == answer)
{
scoreArray[0]++;
}
// 2번 체크
int twoIdx = i % twoAnswer.Length;
if (twoAnswer[twoIdx] == answer)
{
scoreArray[1]++;
}
// 3번 체크
int threeIdx = i % threeAnswer.Length;
if (threeAnswer[threeIdx] == answer)
{
scoreArray[2]++;
}
}
// 최대 점수 구하기
int maxScore = 0;
for (int i = 0; i < scoreArray.Length; i++)
{
if (scoreArray[i] > 0)
{
maxScore = Math.Max(maxScore, scoreArray[i]);
}
}
// 최대 점수인 번호들 리스트에 넣기
for (int i = 0; i < scoreArray.Length; i++)
{
if (scoreArray[i] == maxScore)
{
maxScoreList.Add(i + 1);
}
}
maxScoreList.Sort();
return maxScoreList.ToArray();
}
}
/// <summary>
/// C# 7.3
/// </summary>
internal class Program
{
public static void Main(string[] args)
{
var sl = new Solution();
var answers1 = new int[] { 1, 2, 3, 4, 5 };
var answers2 = new int[] { 1, 3, 2, 4, 2 };
var res1 = sl.solution(answers1);
var res2 = sl.solution(answers2);
foreach (var i in res1)
{
Console.Write(i + " , ");
}
Console.WriteLine();
foreach (var i in res2)
{
Console.Write(i + " , ");
}
}
}
✅ 풀이 코드
피드백 자체는 소소하게 주어진 듯 하다. 문제를 생각해봤을 때 Sort가 의미가 없었다는 점과 루프 안에 동일한 규칙이 반복되는 부분은 함수로 뺄 수 있을 것 정도로 보인다. 함수로 빼는 것 자체는 실제 개발을 하거나 할 때는 필요할 듯 한 방향으로 보인다. 문제의 해결을 빠르게 하는 점에서는 굳이 큰 상관 없을 것으로 보임.
🔄 정리
문제 자체가 단순하게 완전탐색을 하면서 패턴대로 점수를 체크해서 최대점수인 번호만 구하면 되는 문제라 쉽게 푼 문제. 크게 추후에 볼 필요는 없을 듯 한 문제다
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[Lv.1] 숫자 짝꿍 [프로그래머스_코딩테스트] [문자열, 해시] [30분] (1) | 2025.06.10 |
---|---|
[Lv.1] 바탕화면 정리 [프로그래머스_코딩테스트] [구현, 시뮬레이션] [30분] (0) | 2025.06.09 |
[Lv.2] 피로도 [프로그래머스_코딩테스트] [Brute Force, 완전탐색, 순열] [30분] (0) | 2025.06.09 |
[Lv.2] 숫자 변환하기 [프로그래머스_코딩테스트] [DP, BFS] [35분] (0) | 2025.06.07 |
[Lv.1] 소수 만들기 [프로그래머스_코딩테스트] [Brute Force] [25분] (0) | 2025.06.07 |