코딩 공부/알고리즘

정렬

공부를 함 2024. 10. 21. 22:35

급한 상황이기에 이론은 뒤로 미루고 일단 Linq를 적극 활용하기로 했다.

 

연습 문제

1. 백준 1431 : https://www.acmicpc.net/problem/1431

 

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        int N = int.Parse(Console.ReadLine());
        List<string> serials = new List<string>();

        for (int i = 0; i < N; i++)
        {
            serials.Add(Console.ReadLine());
        }

        serials.Sort((a, b) =>
        {
            if (a.Length != b.Length)
                return a.Length.CompareTo(b.Length);

            int sumA = a.Where(char.IsDigit).Sum(c => c - '0');
            int sumB = b.Where(char.IsDigit).Sum(c => c - '0');

            if (sumA != sumB)
                return sumA.CompareTo(sumB);

            return string.Compare(a, b);
        });

        foreach (string serial in serials)
        {
            Console.WriteLine(serial);
        }
    }
}

 

CompareTo()는 IComparable 인터페이스의 서드로, 두 객체를 비교 때 사용된.

 

  • 반환 값:
    • 수: 현재 객체가 교 대상보다 작음
    • 0: 두 객체가 같음
    • 양수: 현재 객체가 비교 대상보다 

Where()는 LINQ(Language Integrated Query)의 확장 메서드로, 컬렉션에서 조건에 맞는 요소들 선택할 때 사용된.

char.IsDigit의 경우 문자열에서 숫자만 선택한다.

string.Compare(a, b)는 두 문자열 a와 b를 사전식으로 비교한다.

  • 반환 값: 
    • 음수: a가 b보다 사전식으로 앞에 옴
    • 0: a와 b가 동일함
    • 양수: a b다 사전식으로 뒤에 옴

 

 

2. 백준 11652 : https://www.acmicpc.net/problem/11652

var n = int.Parse(Console.ReadLine());
long[] arr = new long[n];

for (int i = 0; i < n; i++)
{
    arr[i] = long.Parse(Console.ReadLine());
}
Array.Sort(arr);

int mxcnt = 1;
long mxval = arr[0];
int currentCnt = 1;

for (int i = 1; i < n; i++)
{
    if (arr[i] == arr[i - 1])
    {
        currentCnt++;
    }
    else
    {
        if (currentCnt > mxcnt)
        {
            mxcnt = currentCnt;
            mxval = arr[i - 1];
        }
        currentCnt = 1;
    }
}

if (currentCnt > mxcnt)
{
    mxval = arr[n - 1];
}

Console.WriteLine(mxval);

 

 

 

 

 

 

 

 

 

 

 

'코딩 공부 > 알고리즘' 카테고리의 다른 글

백트래킹  (0) 2024.10.18
재귀  (1) 2024.10.15
DFS  (0) 2024.10.13
BFS  (0) 2024.10.13
스택 활용  (0) 2024.10.12