본문 바로가기
코딩 테스트/프로그래머스 (기초)

[C#][프로그래머스 > 코딩테스트 기초] 배열의 원소만큼 추가하기

by 스누ㅍl 2024. 8. 1.

프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 배열의 원소만큼 추가하기

https://school.programmers.co.kr/learn/courses/30/lessons/181861

 

📒 문제

아무 원소도 들어있지 않은 빈 배열 X가 있습니다. 양의 정수 배열 arr가 매개변수로 주어질 때, arr의 앞에서부터 차례대로 원소를 보면서 원소가 a라면 X의 맨 뒤에 a를 a번 추가하는 일을 반복한 뒤의 배열 X를 return 하는 solution 함수를 작성해 주세요.

 

제한사항

  • 1 ≤ arr의 길이 ≤ 100
  • 1 ≤ arr의 원소 ≤ 100

 

입출력 예

arr result
[5, 1, 4] [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]
[6, 6]  [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
[1] [1]

 

입출력 예 설명

 

입출력 예 #1

  • 예제 1번에 대해서 a와 X를 나타내보면 다음 표와 같습니다.
    a X
      []
    5 [5, 5, 5, 5, 5]
    1 [5, 5, 5, 5, 5, 1]
    4 [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]
    따라서 [5, 5, 5, 5, 5, 1, 4, 4, 4, 4]를 return 합니다.

 

입출력 예 #2

  • 예제 2번에 대해서 a와 X를 나타내보면 다음 표와 같습니다.
    a X
      []
    6 [6, 6, 6, 6, 6, 6]
    6 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
    따라서 [6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6]를 return 합니다.

 

입출력 예 #3

  • 예제 3번에 대해서 a와 X를 나타내보면 다음 표와 같습니다.
    a X
      []
    1 [1]
    따라서 [1]을 return 합니다.

💻 소스코드

using System;
using System.Collections.Generic;

public class Solution {
    public int[] solution(int[] arr) {
        List<int> answer = new List<int>();
        
        for(int i = 0 ; i < arr.Length; i++)
        {
            for(int j = 0 ; j < arr[i]; j++)
            {
                answer.Add(arr[i]);
            }
        }
        
        return answer.ToArray();
    }
}

 

다른 풀이

using System;
using System.Collections.Generic;

public class Solution {
    public int[] solution(int[] arr) {      
        List<int> answer = new List<int>();
        
        foreach(int n in arr)
            answer.AddRange(Enumerable.Repeat(n, n));
            
        return answer.ToArray();
    }
}

 

참고 사이트

AddRange : https://m.blog.naver.com/gamejung13/220793725461
Repeat : https://ibocon.tistory.com/105

📝 풀이

첫번째 풀이는 이중 for문을 이용해 arr의 크기만큼 반복문을 돌면서 각 arr의 요소 크기만큼 돌면서 answer에 값을 추가해주었다. 이중 for문을 도는 것이 맘에 들지 않아 다른 방법을 찾아보았다.

 

그래서 두번째 풀이는

foreach로 각 arr의 요소를 Repeat메서드를 통해 각 숫자 만큼의 배열을 만들어 AddRange로 한번에 추가하였다.

이 방법으로 for문을 한번만 돌면서 index까지 신경쓰지 않아도 되서 좀 더 간편하게 만들어 줄 수 있었다.


관련 포스팅

 

[C# 문법] Enumerable 클래스

최근 수정: 2024.08.01Enumerable 클래스 내용 중 새로 알게되거나 사용했던 메서드들 기록하는 곳입니다. Enumerable 클래스Enumerable 클래스는 LINQ의 일부로 IEnumerable 인터페이스를 구현하는 컬렉션 클래

twd0622.tistory.com

 

 

[C# 문법] List 메서드 모음

최근 수정: 2024.08.01List 메서드 내용 중 새로 알게되거나 사용했던 메서드들 기록하는 곳입니다. 주요 메서드Count : 리스트의 길이를 반환한다.List lst = new List();lst.Add(1);lst.Add(2);lst.Add(3);Console.Write

twd0622.tistory.com