반응형
안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1091 : [기초-종합] 수 나열하기 3 (자바, JAVA)입니다.
Links
Question
문제 설명
입력
시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째 인지를 나타내는 정수(n)가 공백을 두고 입력된다.
(a, m, d는 -50 ~ +50, n은 10이하의 자연수
출력
n번째 수를 출력한다.
예시
- 입력 : 1 -2 1 8
- 출력 : -85
Solution (풀이)
- 풀이 1 : 메모리 14332, 시간 116
public class Answer1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long a = sc.nextInt();
int m = sc.nextInt();
int d = sc.nextInt();
int n = sc.nextInt();
// 물론 for문을 사용하도 무관하다.
// while문을 이용하여 n을 1씩 줄여나가고 그 숫자가 1이상이어야만 반복한다.
while(n-->1) {
a *= m; // 반복할 때 마다 등비의 값 m만큼 시작 값 a에 곱하여 준다.
a += d; // 반복할 때 마다 더할 값 d을 a에 더해준다.
}
System.out.println(a);
sc.close();
}
}
- 풀이 2 : 메모리 11156, 시간 66
public class Answer2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
long a = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
// 물론 for문을 사용하도 무관하다.
// while문을 이용하여 n을 1씩 줄여나가고 그 숫자가 1이상이어야만 반복한다.
while(n-->1) {
a = a*m+d; // a의 값을 m을 곱한 값에 d를 더한 값으로 초기화한다.
}
System.out.println(a);
}
}
기본적으로 두 풀이는 동일한 형태이지만, Scanner를 사용한 1번 풀이가 확실히 성능이 떨어졌고, 한번에 연산을 하는 것이 더 좋다는 결과를 알 수 있다.
사용자로부터 여러 데이터를 입력을 받을 때에는
Scanner
보다는BufferedReader
등을 사용하는 것이 좋다.
반응형
'Algorithm > CodeUp' 카테고리의 다른 글
[CodeUp_Java] Q1094 : [기초-종합] 이상한 출석 번호 부르기2 (0) | 2022.04.18 |
---|---|
[CodeUp_Java] Q1093 : [기초-종합] 이상한 출석 번호 부르기1 (0) | 2022.04.18 |
[CodeUp_Java] Q1092 : [기초-종합] 함께 문제 푸는 날 (0) | 2022.04.18 |
[CodeUp_Java] Q1090 : [기초-종합] 수 나열하기 2 (0) | 2022.02.24 |
[CodeUp_Java] Q1089 : [기초-종합] 수 나열하기 1 (0) | 2022.02.24 |