문제 : https://www.acmicpc.net/problem/1431
1431번: 시리얼 번호
첫째 줄에 기타의 개수 N이 주어진다. N은 1,000보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루
www.acmicpc.net
문제 요약 : 주어진 문자열 정렬 후 출력
| 입력 | 출력 |
| 1 ≤ N(문자 개수) ≤ 1000 1 ≤ l(문자 길이) ≤ 50 |
문자 출력 우선순위 1. 길이가 짧은 것 2. 자리수의 합이 작은것(숫자만 계산) 3. 사전 순 |
JAVA
소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_10205.java
| 채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
| 30905045 | cbkpar | 1431 | 맞았습니다!! | 14300KB | 128ms | Java 11 | 1231B |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int t,i;
t = Integer.parseInt(br.readLine());
ArrayList<chr> arr = new ArrayList<chr>();
for(i=0;i<t;i++) {
String str = br.readLine();
arr.add(new chr(str,num(str)));
}
Collections.sort(arr, new Comparator<chr>() {
@Override
public int compare(chr o1, chr o2) {
if(o1.str.length()!=o2.str.length()) {
return o1.str.length()-o2.str.length();
}else if(o1.n!=o2.n){
return o1.n-o2.n;
}else{
return o1.str.compareTo(o2.str);
}
}
});
for(chr s:arr) sb.append(s.str+"\n");
System.out.println(sb);
}
static int num(String str) {
int n = 0;
for(int i=0;i<str.length();i++) if(str.charAt(i)>='0'&&str.charAt(i)<='9') n+=str.charAt(i)-'0';
return n;
}
public static class chr {
String str;
int n;
public chr(String str, int n) {
this.str = str;
this.n = n;
}
}
}
chr이라는 클래스를 만들어 문자와 문자에 포함되는 숫자의 합을 저장해준다.
이때 문자의 숫자 합은 단어를 한 글자 씩 확인하며 계산한다.
그 이후에 Collections.sort()를 이용해 정렬해준다.
'백준온라인' 카테고리의 다른 글
| [백준온라인] 12778번 CTP공국으로 이민 가자 (0) | 2021.07.23 |
|---|---|
| [백준온라인] 1822번 차집합 (0) | 2021.07.22 |
| [백준온라인] 10205번 헤라클레스와 히드라 (0) | 2021.07.20 |
| [백준온라인] 3181번 줄임말 만들기 (0) | 2021.07.19 |
| [백준온라인] 11383번 뚊 (0) | 2021.07.18 |