코딩테스트/백준

[백준 - 1431] 시리얼 번호 .java

머밍 2025. 5. 14. 12:23

https://www.acmicpc.net/problem/1431

 

 

  • 두개의 조건으로도 비교할 수 없으면 사전순 -> Array.sort로 먼저 정렬
  • 길이가 짧은거 먼저, 같다면 숫자끼리의 합으로 비교 -> hap 함수 생성
  • 입력받은 문자열을 순회하며 숫자면 더함

간단~!

 

import java.util.*;

public class boj{
    public static int hap(String str){
        int answer = 0;
        for(int i=0;i<str.length();i++){
            if(str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') continue;
            else {
                int n = Integer.parseInt(str.substring(i,i+1));
                answer += n;
            }
        }
        return answer;

    }
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        int n=sc.nextInt();

        String[] sn = new String[n];
        for(int i=0;i<n;i++){
            sn[i]=sc.next();
        }
        Arrays.sort(sn);//사전순으로 정렬

        Arrays.sort(sn, new Comparator<String>() {
            public int compare(String o1, String o2) {
                if(o1.length()==o2.length()) {
                    return hap(o1)-hap(o2);//작은합우선
                }
                return o1.length()-o2.length();//길이 순
            }
        });
        for(int i=0;i<n;i++){
            System.out.println(sn[i]);
        }
    }

}

 

 

 

 

 

 

다른 풀이

입력받을때 자리의 숫자끼리 합을 구해서 저장하도록 구현함

import java.util.*;
class Serial{
    public Serial(String serial) {
        this.serial = serial;
        for(int i= 0; i<serial.length(); i++){
            if('0'<=serial.charAt(i)&&serial.charAt(i)<='9'){
                sum += serial.charAt(i)-'0';//숫자로 변환
            }
        }
    }

    String serial;
    int sum;

}
public class boj{

    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        int n=sc.nextInt();

        Serial[] sn = new Serial[n];
        for(int i=0;i<n;i++){
            sn[i]=new Serial(sc.next());
        }

        Arrays.sort(sn, (o1, o2) -> {
            //길이 작은순
           if(o1.serial.length() != o2.serial.length()){
               return o1.serial.length() - o2.serial.length();
           }//합이 작은순
           if(o1.sum!=o2.sum){
               return o1.sum - o2.sum;
           }
            return o1.serial.compareTo(o2.serial);//사전순
        });

        for(Serial s:sn){
            System.out.println(s.serial);
        }
    }

}