문제 풀기/C#

31. 수박(string.Concat() 함수, Enumerable.Repeat 함수)

kagan-draca 2025. 1. 17. 15:43

 

풀이 1) 매개변수 int n을 / 2 한 만큼 반복문을 활용해 "수박"을 적어주고, n % 2 == 1 이면 "수"를 추가로 붙여준다.

 

using System;
using System.Linq;

public class Solution {
    public string solution(int n) 
    {
        string temp = "";
        for(int i = 0; i < n / 2; i++)
        {
            temp += "수박";
        }
        return n % 2 == 1 ? temp + "수" : temp; 
    }
}

 

 

위의 풀이를 바탕으로 반복문 없이 "수박"을 반복적으로 작성할 수 있는 함수가 존재할 것이라 생각을 했다.

 

풀이 2) 

 

검색 결과,

 

Enumberable.Repeat("반복할 문자열", 반복할 횟수);

 

그 결과,

 

string[] 형식으로 "반복할 문자열"이 반복할 횟수 만큼의 배열 길이로 생성 됐다.

 

이를 하나의 문자열로 만들어주기 위해서

 

string.Concat()

 

를 사용해 문자열을 붙여주는 작업을 수행해줬다.

 

그 후, n % 2 == 1일 경우 "수"를 추가로 이어붙여줬다.

 

using System;
using System.Linq;

public class Solution {
    public string solution(int n) 
    {
        string temp = string.Concat(Enumerable.Repeat("수박",n / 2));
        return n % 2 == 1 ?  temp + "수" : temp;
    }
}

 

풀이1)이 풀이2) 보다 적은 수행시간을 요구할 때도 있지만,

더 많은 수행시간을 요구하는 상황이 존재한다.

 

이유는 잘 모르겠지만... 아무래도 temp += "수박"으로 붙이는 과정은

 

operator += 에 의해 += 으로 새로운 문자열을 추가할 수 있게 되는 것이고,

 

operator 내부에서는 new stirng(기존 문자열 + "수박")으로 동작하는 것으로 추측된다.

 

그래서 더 많은 과정을 요구하기 때문에 더 많은 수행시간을 필요로 하는 것 같다.