지금 이 현재
GitHub
  • INTRO
  • CATEGORY
    • Java
      • JVM(Java Virtual Machine)
      • System.arraycopy()
      • toArray 함수 호출 시 빈 배열을 전달해야 하는 이유
      • POI Excel 인쇄 영역, 페이지 나누기 설정
      • Overloading & Overriding
      • Functional Interface
      • computeIfAbsent 메소드를 알아보자
    • Computer Science
      • 캐리지 리턴 문자('\r')
    • Kotlin
      • Java 와 다른 Kotlin
    • C++
      • ios_base::sync_with_stdio 의 역할과 사용 이유
    • Javascript
      • 자바스크립트 기본 - 문법
      • 자바스크립트 기본 - 함수
    • MySQL
      • EXPLAIN
    • Android
      • Android 기초
    • Error
      • macOS 업데이트 후 mysql 실행 에러
    • Algorithm
      • 모듈러 산술 (Modular Arithmetic)
  • BOOK
    • 헤드퍼스트 디자인 패턴
      • 전략 패턴(Strategy Pattern)
      • 옵저버 패턴(Observer Pattern)
      • 커맨드 패턴(Command Pattern)
      • 데코레이터 패턴(Decorator Pattern)
    • 자바의 정석
      • Chapter 14. Lambda & Stream
    • 함께 자라기
      • 자라기
  • STUDY
    • 99클럽
      • [99클럽 코테 스터디 1일차 TIL] 프로그래머스 - n^2 배열 자르기
      • [99클럽 코테 스터디 2일차 TIL] 프로그래머스 - x만큼 간격이 있는 n개의 숫자
      • [99클럽 코테 스터디 3일차 TIL] 프로그래머스 - 문자열 내 마음대로 정렬하기
      • [99클럽 코테 스터디 4일차 TIL] 프로그래머스 - JadenCase 문자열 만들기
      • [99클럽 코테 스터디 5일차 TIL] 프로그래머스 - 전화번호 목록
      • [99클럽 코테 스터디 6일차 TIL] 프로그래머스 - 의상
      • [99클럽 코테 스터디 7일차 TIL] 프로그래머스 - 하노이의 탑
      • [99클럽 코테 스터디 8일차 TIL] 프로그래머스 - 기능개발
      • [99클럽 코테 스터디 9일차 TIL] 프로그래머스 - 더 맵게
      • [99클럽 코테 스터디 10일차 TIL] 프로그래머스 - 이중우선순위큐
      • [99클럽 코테 스터디 11일차 TIL] 프로그래머스 - 카드 뭉치
      • [99클럽 코테 스터디 12일차 TIL] 프로그래머스 - H-Index
      • [99클럽 코테 스터디 13일차 TIL] 백준 - 숫자 카드
      • [99클럽 코테 스터디 14일차 TIL] 백준 - 숫자 카드 2
      • [99클럽 코테 스터디 15일차 TIL] LeetCode - Prefix and Suffix Search
      • [99클럽 코테 스터디 16일차 TIL] 프로그래머스 - 모음사전
      • [99클럽 코테 스터디 17일차 TIL] 백준 - 촌수계산
      • [99클럽 코테 스터디 18일차 TIL] 백준 - 단지번호붙이기
      • [99클럽 코테 스터디 19일차 TIL] 프로그래머스 - 구명보트
      • [99클럽 코테 스터디 20일차 TIL] 프로그래머스 - 큰 수 만들기
      • [99클럽 코테 스터디 21일차 TIL] 프로그래머스 - 피보나치 수
      • [99클럽 코테 스터디 22일차 TIL] 프로그래머스 - 멀리 뛰기
      • [99클럽 코테 스터디 23일차 TIL] 프로그래머스 - 마법의 엘리베이터
      • [99클럽 코테 스터디 24일차 TIL] 프로그래머스 - 대충 만든 자판
      • [99클럽 코테 스터디 29일차 TIL] LeetCode - Longest Increasing Subsequence
      • [99클럽 코테 스터디 31일차 TIL] 백준 - 점프 점프
      • [99클럽 코테 스터디 32일차 TIL] 프로그래머스 - 무인도 여행
      • [99클럽 코테 스터디 33일차 TIL] 프로그래머스 - 리코쳇 로봇
      • [99클럽 코테 스터디 34일차 TIL] 프로그래머스 - 타겟 넘버
      • [99클럽 코테 스터디 35일차 TIL] 프로그래머스 - 게임 맵 최단거리
      • [99클럽 코테 스터디 36일차 TIL] 프로그래머스 - 전력망을 둘로 나누기
      • [99클럽 코테 스터디 37일차 TIL] 백준 - 부등호
Powered by GitBook
On this page
  • [level 1] x만큼 간격이 있는 n개의 숫자 - 12954
  • 풀이 코드
  • 돌아보기
  • 개선하기
  • 다음에는
  1. STUDY
  2. 99클럽

[99클럽 코테 스터디 2일차 TIL] 프로그래머스 - x만큼 간격이 있는 n개의 숫자

99클럽 코테 스터디 2일차 TIL 입니다.

Previous[99클럽 코테 스터디 1일차 TIL] 프로그래머스 - n^2 배열 자르기Next[99클럽 코테 스터디 3일차 TIL] 프로그래머스 - 문자열 내 마음대로 정렬하기

Last updated 9 months ago

[level 1] x만큼 간격이 있는 n개의 숫자 - 12954

성능 요약

메모리: 79.3 MB, 시간: 0.06 ms

문제 설명

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한 조건

  • x는 -10000000 이상, 10000000 이하인 정수입니다.

  • n은 1000 이하인 자연수입니다.

입출력 예

x
n
answer

2

5

[2,4,6,8,10]

4

3

[4,8,12]

-4

2

[-4, -8]

풀이 코드

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        for (int i = 0; i < n; i++) {
            answer[i] = (long) x * (i + 1);
        }
        return answer;
    }
}

x 숫자에 대한 구구단 값을 배열에 넣으면 되는 문제다. 구구단은 1부터 시작하니까 i + 1 로 곱한다.

돌아보기

처음 풀이 코드를 제출하고 실패 했는데 long 으로 캐스팅하지 않았기 때문이다. 왜냐하면 연산 결과가 정수형의 최대 크기를 넘어갔기 때문이다. 예를 들어 x 의 양수 최대 크기인 1000만과 n 의 최대 크기 1000 을 곱하면 100억이 되고 이는 정수형의 최대 크기 약 21억을 넘어가게 되기 때문에 실패하게 된다.

캐스팅을 하지 않고 x 에 1000만과 n 에 215 를 넣어서 로직을 돌려보면 215번째 값은 아래와 같은 수가 나오게 된다.

[..., 2140000000, -2144967296]

정수형 범위는 -2^31 - 1 ~ 2^31 -1 로 -2,147,483,648 ~ 2,147,483,647 이다. 그렇기 때문에 214번째에서 1000만을 더하는 순간 정수형의 최대 크기를 넘어서게 되고 최솟 값으로 돌아가 남는 수만큼 최솟 값에 더하게 된다.

따라서 x 값을 long 으로 캐스팅하고 i + 1 과 곱하게 되면 정수형보다 범위가 큰 long 타입으로 연산이 되기 때문에 문제없이 통과하게 된다.

개선하기

위 풀이 코드는 n 번동안 x 값을 long 타입으로 캐스팅하게 되면서 n 번의 형 변환 비용이 발생하게 된다. 이를 한번으로 줄이는게 좋을 것으로 보이며 아래와 같이 작성할 수 있다.

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        long longX = x;
        for (int i = 0; i < n; i++) {
            answer[i] = longX * (i + 1);
        }
        return answer;
    }
}

또한 StreamAPI 를 통해 가독성도 높이고 코드 또한 간결하게 작성할 수 있다.

class Solution {
    public long[] solution(int x, int n) {
        long longX = x;
        return LongStream.range(1, n + 1)
                .map(i -> longX * i)
                .toArray();
    }
}

대신 StreamAPI 는 성능 면에서 떨어질 수 있기 때문에 잘 알아보고 활용해야겠다.

다음에는

  1. 자료형의 범위에 대해 신경쓰기

  2. 형 변환 비용 생각하기


#99클럽 #코딩테스트준비 #개발자취업 #항해99 #TIL

문제 링크