728x90
반응형
🔥개인 취미 목적으로 프로그래머스 문제를 정리한 게시글입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12932
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✏️ 문제설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요.
예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
💡 제한사항
n은 10,000,000,000 이하인 자연수입니다.
📚 입출력 예
n | return |
12345 | [5, 4, 3, 2, 1] |
💻 소스 코드
class Solution {
public int[] solution(long n) {
int[] answer = new int[String.valueOf(n).length()];
int cnt = 0;
while(n > 0) {
answer[cnt] = (int) n % 10;
n = n / 10;
cnt++;
}
return answer;
}
}
주어진 코드는 정수 n을 입력으로 받아서, n의 각 자릿수를 배열로 저장한 후 반환하는 함수입니다.
코드의 동작을 다음과 같이 설명할 수 있습니다.
- n의 각 자릿수를 저장할 정수 배열 answer를 생성합니다. 배열의 크기는 n의 자릿수와 동일하게 설정됩니다. 이를 위해 String.valueOf(n).length()를 사용하여 n의 자릿수를 구하고, 그 크기로 배열을 초기화합니다.
- cnt라는 변수를 생성하고 0으로 초기화합니다. 이 변수는 배열 answer에 각 자릿수를 저장하기 위한 인덱스 역할을 합니다.
- while 루프를 사용하여 n이 양수인 동안 반복합니다.
- 각 반복에서, n을 10으로 나눈 나머지를 계산하여 현재 자릿수를 얻습니다. (int) n % 10 연산을 통해 가장 오른쪽 자릿수를 추출합니다.
- 추출한 자릿수를 배열 answer의 cnt 인덱스 위치에 저장합니다.
- 다음으로, n을 10으로 나누어서 다음 자릿수로 이동합니다. 예를 들어, n이 12345라면 첫 번째 반복에서 5를 추출한 후 n은 1234가 됩니다.
- cnt를 1 증가시켜 다음 자릿수를 저장할 배열 인덱스를 준비합니다.
- n이 더 이상 양수가 아니면 (즉, 모든 자릿수를 처리한 경우), 루프가 종료되고 answer 배열에는 n의 각 자릿수가 저장됩니다.
- 배열 answer를 반환하여 결과를 출력합니다.
시간 복잡도
위 코드의 반복문이 주어진 입력값 n의 자릿수에 비례하여 실행됩니다. n의 자릿수가 k라고 가정하면, while 루프는 k번 반복합니다. 반복문 내에서 수행되는 연산은 모두 상수 시간으로, 이 코드의 시간 복잡도는 O(k)입니다.
공간 복잡도
다음으로 공간 복잡도는 배열 answer를 생성하는데 드는 공간과 추가적으로 사용되는 변수인 cnt의 공간을 고려해야 합니다. 배열 answer는 입력값 n의 자릿수에 비례한 공간을 사용하며, cnt 변수 역시 상수 공간을 사용하기 때문에 이 코드의 공간 복잡도는 O(k)입니다.
이 코드의 시간 복잡도와 공간 복잡도는 입력값의 크기가 아니라 자릿수에 의해 결정됩니다.
728x90
반응형
'🕊️ 프로그래머스 > Lv1' 카테고리의 다른 글
[프로그래머스] Lv.1 문자열 내 p와 y의 개수 - Java (0) | 2023.11.25 |
---|---|
[프로그래머스] Lv.1 자릿수 더하기 - Java (0) | 2023.11.24 |
[프로그래머스] Lv.1 문자열을 정수로 바꾸기 - Java (0) | 2023.11.22 |
[프로그래머스] Lv.1 x만큼 간격이 있는 n개의 숫자 - Java (0) | 2023.11.21 |
[프로그래머스] Lv.1 나머지가 1이 되는 수 찾기 - Java (0) | 2023.11.20 |