프로그래머스 | 문자열 내 마음대로 정렬하기

Algorithm 2019. 8. 26. 10:59
반응형

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 [sun, bed, car]이고 n이 1이면 각 단어의 인덱스 1의 문자 u, e, a로 strings를 정렬합니다.

제한 조건

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

입출력 예

stringsnreturn

[sun, bed, car] 1 [car, bed, sun]
[abce, abcd, cdx] 2 [abcd, abce, cdx]

입출력 예 설명

입출력 예 1
sun, bed, car의 1번째 인덱스 값은 각각 u, e, a 입니다. 이를 기준으로 strings를 정렬하면 [car, bed, sun] 입니다.

입출력 예 2
abce와 abcd, cdx의 2번째 인덱스 값은 c, c, x입니다. 따라서 정렬 후에는 cdx가 가장 뒤에 위치합니다. abce와 abcd는 사전순으로 정렬하면 abcd가 우선하므로, 답은 [abcd, abce, cdx] 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
using System;
 
namespace _15
{
    class Program
    {
        static void Main(string[] args)
        {
            //case 1
            // string[] strings = {"sun", "bed", "car"};
            // var n = 1;
            //exptected: [car, bed, sun]
 
            //case 2
            string[] strings = {"abcc""abcx""abca"};
            var n = 2;
            //exptectd: [abcd, abce, cdx]
 
            //case 3
            // string[] strings = {"sun", "bued", "car"};
            // var n = 1;
 
            var s = new Solution();
            var result = s.solution(strings, n);
            foreach(var str in result){
                Console.Write(str + " " );
            }
 
        }
    }
 
    public class Solution {
        public string[] solution(string[] strings, int n) {
            string[] answer = new string[] {};
 
            Array.Sort(strings, (a, b)=>{
                var a1 = a.Substring(n);
                var b1 = b.Substring(n);
                if(a1.Equals(b1)){
                    return a.CompareTo(b);    
                }else{
                    return a1.CompareTo(b1);
                }
            });
 
            answer = strings;
 
            return answer;
        }
    }
 
}
 
 
 

 

 

 

https://docs.microsoft.com/ko-kr/dotnet/api/system.string.substring?view=netframework-4.8

 

String.Substring Method (System)

이 인스턴스에서 부분 문자열을 검색합니다.Retrieves a substring from this instance. 이 멤버는 오버로드됩니다.This member is overloaded. 구문, 사용법 및 예제를 비롯하여 이 멤버에 대한 자세한 내용을 보려면 오버로드 목록에서 이름을 클릭합니다.For complete information about this member, including syntax, usage, and examples, click a

docs.microsoft.com

 

https://www.dotnetperls.com/string-char

 

C# String Chars (Get Char at Index) - Dot Net Perls

Example 2. Here we look at some complications. When you have a string that is null, it does not point to any object data, and you cannot use the indexer on it. Therefore, the character accesses will not succeed.And: With empty strings, the Length is zero,

www.dotnetperls.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
 
namespace _15
{
    class Program
    {
        static void Main(string[] args)
        {
            //case 1
            // string[] strings = {"sun", "bed", "car"};
            // var n = 1;
            //exptected: [car, bed, sun]
 
            //case 2
            string[] strings = {"abcc""abcx""abca"};
            var n = 2;
            //exptectd: [abcd, abce, cdx]
 
            //case 3
            // string[] strings = {"sun", "bued", "car"};
            // var n = 1;
 
            var s = new Solution();
            var result = s.solution(strings, n);
            foreach(var str in result){
                Console.Write(str + " " );
            }
 
        }
    }
 
    public class Solution {
        public string[] solution(string[] strings, int n) {
            string[] answer = new string[] {};
 
            Array.Sort(strings, (a, b)=>{
                var a1 = a[n];
                var b1 = b[n];
 
                // var a1 = a.Substring(n);
                // var b1 = b.Substring(n);
 
                if(a1.Equals(b1)){
                    return a.CompareTo(b);    
                }else{
                    return a1.CompareTo(b1);
                }
            });
 
            answer = strings;
 
            return answer;
        }
    }
 
}
 
 
 

 

반응형

'Algorithm' 카테고리의 다른 글

프로그래머스 | 소수찾기  (0) 2019.08.26
프로그래머스 | 평균구하기  (0) 2019.08.26
프로그래머스 | Collatz(콜라츠) 추측  (0) 2019.08.26
BFS / DFS  (0) 2019.08.25
프로그래머스 | 타겟 넘버  (0) 2019.08.23
: