본문 바로가기

Algorithm/CodeUp

[CodeUp_Java] Q1089 : [기초-종합] 수 나열하기 1

반응형

안녕하세요! Plitche(플리체)입니다.
이번 포스팅의 주제는 Q1089 : [기초-종합] 수 나열하기 1 (자바, JAVA)입니다.

intro

오늘부터 이제까지 풀었던 CodeUp(코드업) 알고리즘 문제들을 다시 되돌아 보면서, 수정할 사항들을 체크하고 그 답안을 포스팅 하고자 한다.

CodeUp(코드업)문제들이 C언어를 기반으로 푸는 분들이 많다보니 어려운 문제를 만나도 확실하게 도움을 받지 못했던 경우가 많아 적어도 내가 해결했던 문제들의 답변을 공유 하고자 한다.

Question

문제 설명

입력

시작 값(a), 등차의 값(d), 몇 번째 수 인지를 의미하는 정수(n)가 공백을 두고 입력된다.(모두 0 ~ 100)

출력

n번째 수를 출력한다.

예시

  • 입력 : 1 3 5
  • 출력 : 13

Solution (풀이)

  • 풀이 1: 메모리 14300, 시간 123
public class Answer1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int d = sc.nextInt();
        int n = sc.nextInt();

        for (int i=1; i<n; i++) {    // 1부터 n까지 반복문 실행
            a += d;    // 반복문이 실행될 때마다 등차의 값을 시작값에 더하라.
        }

        System.out.println(a);
        sc.close();
    }
}

1번 풀이는 Scannerfor문을 이용한 풀이 입니다. 일반적으로 쉽게 생각할 수 있는 방법이지만 반복문이 사용 되다 보니 확실히 성능이 좋지 않습니다.

 

  • 풀이 2: 메모리 11160, 시간 69
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(), " ");
        int a = Integer.parseInt(st.nextToken());
        int d = Integer.parseInt(st.nextToken());
        int n = Integer.parseInt(st.nextToken());

        a += d*(n-1);    
        // 시작값 a에 등차의값 d * 몇번째수 n 를 더한다.
        // 몇번째수-1 해주는 이유는 시작값도 첫 번째 수에 포함되기 때문이다.

        System.out.println(a);
        br.close();
    }
}

2번 풀이처럼 반복문을 생략하고 단순한 사칙연산으로 쉽게 풀 수 있으니 조금만 생각해보면 훨신 더 간결하고 성능 좋은 코드를 짤 수 있을 것 입니다.

Review

  • 당연히 저도 신입!으로 써 진짜 말도 안되게 좋지않은 코드를 짤 떄가 많아서...^^ 항상 고민하는 개발자가 될수 있도록 노력해요!
반응형