[BOJ] 2870 - 수학숙제 (🥈 실버 4티어)
사용 언어: Python3, Java
문제
풀이
나의 풀이
파이썬
N = int(input())
lst = [input() for _ in range(N)]
numbers = []
for val in lst:
tmp = ''
for x in val:
if x.isdecimal():
tmp += x
else:
if tmp:
numbers.append(int(tmp))
tmp = ''
if tmp:
numbers.append(int(tmp))
print(*sorted(numbers), sep='\n')
- 테스트 케이스: 성공
- 제출 결과: 성공
print(*)
: 리스트 원소나 문자열 각각의 문자를 한 칸 씩 띄워 출력한다.
ans = [1, 2, 3] print(*ans) # 1 2 3
다른 풀이
자바
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(in.readLine());
String numbers[]; // "입력 한 줄"애서 "숫자"만 뽑은 배열 (숫자가 아닌걸로 split 할 예정)
ArrayList<BigInteger> arr = new ArrayList<>();
for (int i=0; i<n; i++) {
//문자열 "3a9d"의 경우 아래 식을 거치고 나면 "3", "", "9", "" 이 된다.
numbers = in.readLine().split("\\D"); // \D: 숫자가 아닌 것들 [^0-9]와 같음
for (int j=0; j<numbers.length; j++) {
if (!numbers[j].equals("")) {
arr.add(new BigInteger(numbers[j]));
}
}
}
arr.sort(null); // 오름차순 정렬
for (int i=0; i<arr.size(); i++) {
out.write(arr.get(i) + "\n"); // 버퍼에 쓰기
}
out.close(); // 버퍼 출력 후 출력스트림 닫기
in.close(); // 입력스트림 닫기
}
}
- 테스트 케이스: 성공
- 제출 결과: 성공
- 위 코드에서 확인 가능한 또 다른 포인트는 바로
numbers[]
배열에 담긴 문자열을 BigInteger를 이용해서 어레이 리스트에 저장했다는 것이다.- 숫자가 100자리 들어올 수 있기 때문에 그 어떤 정수 자료형으론 표현할 수 없어서 문자열을 이용해 빅 인티저에 담은 것이다.
- (p.s. 파이썬에선 그냥 int로 때려박아도 된다.)
sort()
의 매개변수로는null
또는Comparator()
가 들어갈 수 있으며(람다 가능),null
이면 디폴트로 비 내림차순 정렬을 해준다.
💛 개인 공부 기록용 블로그입니다. 👻