Search
Duplicate
📒

[Baekjoon] 01-01. 수학숙제

상태
완료
수업
Algorithm Solving
주제
Baekjoon
4 more properties
참고

문제해설

NOTE
입력 값 ⇒ 정수(종이의 줄의 개수), 다음 N개의 줄에는 각 줄의 내용이 주어지며 최대 100글자이고, 항상 알파벳 소문자와 숫자로만 이루어진다.
각 종이에서 찾은 숫자의 개수를 M이라 한다면, 출력은 M줄로 이루어지며 비내림차순으로 출력한다.

문제 로직고민

NOTE
하나의 문자열에서 숫자값만 뽑아내야 한다.
문자열을 char의 배열로 분리한뒤, Character.isDigit()함수를 사용해서 숫자이면 값을 넣고, 아닌경우 “ “을 넣어주었다.
이후 split(”\\s+”)을 진행하면 연속된 공백은 분리된다.
단 “”가 배열에 들어가있을 수 있으므로, 숫자로 변환하기전에 빈문자인지 확인한다.
숫자는 최대 100자이상이 될 수 있다.
Long타입으로도 커버가 안되므로, BigInter라는 객체를 사용해야 한다.

작성코드

NOTE
public class _2870 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); String[] s; int N = Integer.parseInt(br.readLine()); ArrayList<BigInteger> list = new ArrayList<BigInteger>(); for (int i = 0; i < N; i++) { String line = br.readLine(); for (char c : line.toCharArray()) { if(Character.isDigit(c)) sb.append(c); else sb.append(" "); } for(String n : sb.toString().split("\\s+")){ if(!n.isEmpty()) list.add(new BigInteger(n)); } sb = new StringBuilder(); } Collections.sort(list); for(BigInteger i : list){ System.out.println(i); } } }
Java
복사
BigInteger를 모른다면 상당히 까다로 문제유형 (실제 기업코테에서는 Long범위로 나올듯)

다른사람 풀이

NOTE
public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); ArrayList<String> list = new ArrayList<>(); int N = Integer.parseInt(br.readLine()); while(N-->0) { String s = br.readLine(); boolean isEmpty = true; for(char c : s.toCharArray()) { if(c>='0' && c<='9') { sb.append(c); isEmpty = false; } else { if(!isEmpty) { if(sb.length()!=1 && sb.charAt(0)=='0') { for(int i=0; i<sb.length(); ++i) { if(i==sb.length()-1 && sb.charAt(i)=='0') break; if(sb.charAt(i)=='0') { sb.deleteCharAt(i); --i; } else break; } } list.add(sb.toString()); sb.setLength(0); isEmpty = true; } } } if(!isEmpty) { if(sb.length()!=1 && sb.charAt(0)=='0') { for(int i=0; i<sb.length(); ++i) { if(i==sb.length()-1 && sb.charAt(i)=='0') break; if(sb.charAt(i)=='0') { sb.deleteCharAt(i); --i; } else break; } } list.add(sb.toString()); sb.setLength(0); } } Collections.sort(list, new Comparator<String>() { @Override public int compare(String o1, String o2) { if(o1.length()==o2.length()) { return o1.compareTo(o2); } return o1.length()-o2.length(); } }); for(String a : list) sb.append(a).append("\n"); System.out.print(sb); } }
Java
복사
BigInteger없이 풀이한 코드
문자열로 숫자를 모두 받은뒤, 숫자처럼 정렬하도록 진행한 방법이다.
비교에서는 문자열의 길이부터 비교한 이후, 길이가 같다면 기존의 방식으로 비교하도록 한다.
0으로 시작하는 경우, 0의 값을 제거해준다.