코딩테스트/백준
[백준 - 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);
}
}
}