[프로그래머스] x만큼 간격이 있는 n개의 숫자

2024. 10. 13. 12:21·여러가지/알고리즘 & 자료구조

문제 설명

정수 x와 자연수 n이 주어졌을 때, x부터 시작해 x씩 증가하는 숫자를 n개 반환하는 문제입니다. x는 양수, 음수, 또는 0일 수 있으며, 결과 리스트는 x의 배수로 채워져야 합니다.


제한 사항

  • x는 -10,000,000 이상, 10,000,000 이하인 정수입니다.
  • n은 1 이상, 1,000 이하인 자연수입니다.

입출력 예

x n 결과
2 5 [2, 4, 6, 8, 10]
4 3 [4, 8, 12]
-4 2 [-4, -8]

문제 풀이

1. Java 코드 풀이

import java.util.Arrays;

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);  // x의 배수를 저장
        }

        return answer;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(Arrays.toString(sol.solution(2, 5)));  // 출력: [2, 4, 6, 8, 10]
        System.out.println(Arrays.toString(sol.solution(4, 3)));  // 출력: [4, 8, 12]
        System.out.println(Arrays.toString(sol.solution(-4, 2))); // 출력: [-4, -8]
    }
}

코드 설명

  1. 입력:

    • x: 시작 값이자 증가할 간격.
    • n: 출력할 숫자의 개수.
  2. 배열 생성:

    • 크기가 n인 long[] 배열을 선언합니다. 여기서 long 타입을 사용하는 이유는, x의 값이 매우 클 수 있기 때문입니다(-10,000,000 ≤ x ≤ 10,000,000). 따라서 int 타입 범위를 넘을 수 있는 값을 대비해야 합니다.
  3. 배열 채우기:

    • for 루프를 사용하여 배열을 채웁니다. x의 배수를 차례대로 계산해서 answer[i]에 넣습니다.
    • i + 1을 곱해 x, 2x, 3x, ... 등의 값을 배열에 저장합니다.
  4. 결과 반환:

    • 완성된 배열을 반환합니다.

2. Python 코드 풀이

def solution(x, n):
    return [(x * (i + 1)) for i in range(n)]

# 테스트 예시
print(solution(2, 5))  # 출력: [2, 4, 6, 8, 10]
print(solution(4, 3))  # 출력: [4, 8, 12]
print(solution(-4, 2)) # 출력: [-4, -8]

코드 설명:

  1. 리스트 컴프리헨션을 사용하여 Python 코드가 매우 간결합니다.

    • range(n)은 0부터 n-1까지의 값을 생성하며, 여기에 (i + 1)을 곱해 x, 2x, 3x, ... 등의 값을 리스트에 담습니다.
  2. 배열 반환:

    • 계산된 값을 리스트로 반환합니다.

3. 시간 복잡도 분석

두 코드 모두 O(n)의 시간 복잡도를 가집니다.

  • 입력으로 주어진 자연수 n의 크기만큼 반복문을 실행하여 배열을 채우기 때문에, 시간이 n에 비례합니다.

4. 공간 복잡도 분석

공간 복잡도 역시 O(n)입니다.

  • 결과로 반환할 배열을 생성하고 그 크기가 n이므로, 추가적으로 n개의 공간이 필요합니다.

5. 다른 자바 코드 풀이 방법

방법 1: Stream API 사용 (Java 8 이상)

Java 8부터는 Stream API를 이용하여 배열이나 리스트를 처리할 수 있습니다. 이 방식으로 문제를 풀면 더욱 간결하게 작성할 수 있습니다.

import java.util.stream.LongStream;

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

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(Arrays.toString(sol.solution(2, 5)));  // 출력: [2, 4, 6, 8, 10]
        System.out.println(Arrays.toString(sol.solution(4, 3)));  // 출력: [4, 8, 12]
        System.out.println(Arrays.toString(sol.solution(-4, 2))); // 출력: [-4, -8]
    }
}

결론

  • 이 문제는 x의 배수를 계산하여 n개의 값을 반환하는 문제로, O(n)의 시간 복잡도를 가지며 매우 효율적으로 풀 수 있습니다.
저작자표시 (새창열림)

'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글

[프로그래머스] 자릿수 더하기  (1) 2024.10.13
[프로그래머스] 짝수와 홀수  (0) 2024.10.13
[프로그래머스] 평균 구하기  (0) 2024.10.13
[프로그래머스] 나머지가 1이되는 수 찾기  (0) 2024.10.12
[프로그래머스] 뒤에서 5등까지  (0) 2024.10.12
'여러가지/알고리즘 & 자료구조' 카테고리의 다른 글
  • [프로그래머스] 자릿수 더하기
  • [프로그래머스] 짝수와 홀수
  • [프로그래머스] 평균 구하기
  • [프로그래머스] 나머지가 1이되는 수 찾기
hyeseong-dev
hyeseong-dev
안녕하세요. 백엔드 개발자 이혜성입니다.
  • hyeseong-dev
    어제 오늘 그리고 내일
    hyeseong-dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (286)
      • 여러가지 (107)
        • 알고리즘 & 자료구조 (72)
        • 오류 (4)
        • 이것저것 (29)
        • 일기 (1)
      • 프레임워크 (39)
        • 자바 스프링 (39)
        • React Native (0)
      • 프로그래밍 언어 (38)
        • 파이썬 (30)
        • 자바 (3)
        • 스프링부트 (5)
      • 컴퓨터 구조와 운영체제 (3)
      • DB (17)
        • SQL (0)
        • Redis (17)
      • 클라우드 컴퓨팅 (2)
        • 도커 (2)
        • AWS (0)
      • 스케쥴 (65)
        • 세미나 (0)
        • 수료 (0)
        • 스터디 (24)
        • 시험 (41)
      • 트러블슈팅 (1)
      • 자격증 (0)
        • 정보처리기사 (0)
      • 재태크 (5)
        • 암호화폐 (5)
        • 기타 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    docker
    ecs
    항해99
    spring
    #개발자포트폴리오 #개발자이력서 #개발자취업 #개발자취준 #코딩테스트 #항해99 #취리코 #취업리부트코스
    celery
    Spring WebFlux
    프로그래머스
    reactor
    java
    RDS
    SAA
    OOP
    EC2
    DP
    Docker-compose
    AWS
    파이썬
    FastAPI
    mybatis
    자바
    Redis
    그리디
    백준
    Spring Boot
    완전탐색
    WebFlux
    시험
    Python
    취업리부트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hyeseong-dev
[프로그래머스] x만큼 간격이 있는 n개의 숫자
상단으로

티스토리툴바