티스토리 뷰
💻C언어 코드 바로보기
💻JAVA 코드 바로보기
□문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
□제한사항
- n은 10,000,000,000이하인 자연수입니다.
□입출력 예
n | return |
12345 | [5,4,3,2,1] |
🌼C언어 알고리즘
□초기화면
□malloc 사이즈 지정하기
각 자릿수를 구하여 배열에 넣는 알고리즘은 간단하지만, malloc의 사이즈를 입력받은 숫자의 자릿수만큼 지정하고 싶어서 여러가지,,? 를 도전해보았다 |
▶int* answer = (int*)malloc(sizeof(int));
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(long long n) {
// 리턴할 값은 메모리를 동적 할당해주세요.
int* answer = (int*)malloc(sizeof(int));
int i=0;
while(n>0){
answer[i] = n%10;
n/=10;
i++;
}
return answer;
}
▶int* answer = (int*)malloc(sizeof(int)*(size+1));
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(long long n) {
// malloc 전에 길이 구하기
int size=0;
int size_n = n;
while(size_n>0){
size++;
size_n/=10;
}
int* answer = (int*)malloc(sizeof(int)*(size+1));
int i=0;
while(n>0){
answer[i] = n%10;
n/=10;
i++;
}
return answer;
}
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int* solution(long long n) {
// 리턴할 값은 메모리를 동적 할당해주세요.
int* answer = (int*)malloc(sizeof(int)*11);
int i=0;
while(n>0){
answer[i] = n%10;
n/=10;
i++;
}
return answer;
}
▲자바 풀고나서 알았는데,, 문자열로 바꾼 후 그 길이로 malloc지정을 해도 괜찮을 듯 하다
□코드 분석
단계 | 과정 |
변수와 배열 선언 | 각 자리의 값을 저장할 배열 answer 배열에 값을 추가할 때마다 다음 방으로 옮겨줄 인덱스 i |
while | n이 0보다 클 동안 반복한다 |
끝 자리수 배열에 할당하기 | answer의 i방에 n의 일의 자리 수 n%10을 할당한다. |
다음 자리수로 넘어가기 | n = n/10을 진행하여 십의자리 -> 일의자리 와 같이 되게 한다. |
예시 | n = 456; answer[0] += 456%10; // answer[0] == 6 n = 456/10; // n == 45 answer[1] += 45%10; // answer[1] == 5 n = 45/10; // n == 4 answer[2] += 4%10; // answer[2] == 4 n = 4/10; // n == 0 반복 종료 |
□최종 결과
🌼JAVA 알고리즘
□초기화면
□배열 사이즈 동적할당하기
위의 ▶int* answer = (int*)malloc(sizeof(int)*(size+1)); 코드 방식이 자바에서는 되려나 해봣으나,,, |
class Solution {
public int[] solution(long n) {
int size=0;
int size_n = (int)n;
while(size_n>0){
size++;
size_n/=10;
}
int[] answer = new int[size];
int index = 0;
while(n>0){
answer[index] = (int)n%10;
n/=10;
index++;
}
return answer;
}
}
그런데 정수형의 길이를 구하는 함수를 찾아보다가, Math.log10() 함수를 발견했다! 🔗Oracle Method / Math / Log 🔗Log를 이용하여 자리수 구하기 |
class Solution {
public int[] solution(long n) {
int length = (int)( Math.log10(n)+1 );
int[] answer = new int[length];
int cnt=0;
while(n>0) {
answer[cnt]=(int)(n%10);
n/=10;
cnt++;
}
return answer;
}
}
□코드 분석
단계 | 과정 |
변수와 배열 선언 | 각 자리의 값을 저장할 배열 answer 배열에 값을 추가할 때마다 다음 방으로 옮겨줄 인덱스 i |
매개변수 n의 길이 구하기 | (int)( Math.log10(n)+1 ) Math함수를 이용하여 숫자의 길이를 구한다. |
while | n이 0보다 클 동안 반복한다 |
끝 자리수 배열에 할당하기 | answer의 i방에 n의 일의 자리 수 n%10을 할당한다. |
다음 자리수로 넘어가기 | n = n/10을 진행하여 십의자리 -> 일의자리 와 같이 되게 한다. |
예시 | n = 456; answer[0] += 456%10; // answer[0] == 6 n = 456/10; // n == 45 answer[1] += 45%10; // answer[1] == 5 n = 45/10; // n == 4 answer[2] += 4%10; // answer[2] == 4 n = 4/10; // n == 0 반복 종료 |
□링크
코딩테스트 연습 - 자연수 뒤집어 배열로 만들기
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345
programmers.co.kr
About Me
💻GitHub/KimSky904 KimSky904 - Overview Department of New Media Software. KimSky904 has 8 repositories available. Follow their code on GitHub. github.com
code-review.tistory.com
'[코테] > [Programmers Lv1]' 카테고리의 다른 글
[Programmers] Lv1_정수 제곱근 판별 (C/JAVA) (0) | 2021.06.11 |
---|---|
[Programmers] Lv1_짝수와 홀수 (C/JAVA) (0) | 2021.06.11 |
[Programmers] Lv1_자릿수 더하기 (C/JAVA) (0) | 2021.06.10 |
[Programmers] Lv1_약수의 합 (C/JAVA) (0) | 2021.06.09 |
[Programmers] Lv1_수박수박수박수박수박수? (C/JAVA) (0) | 2021.06.08 |
댓글
공지사항
최근에 올라온 글
TAG
- cospro기출
- Cos Pro
- 구름에듀 기출문제
- C
- 구름에듀
- Java
- 배열
- 연습문제
- 구름 기출문제
- lv2
- CosPro
- 코스프로
- C++
- COSPRO 2급
- 자바
- programmers
- cospro기출문제
- 1급
- 알고리즘
- 기출문제
- c언어
- 코딩테스트
- lv1
- c언어 기출문제
- YBM
- groom
- groomedu
- 배열활용문제
- 프로그래머스
- YBM기출
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함