Notice
Recent Posts
Recent Comments
Link
04-27 17:38
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- AWS
- springboot
- 우리FIS아카데미
- 클라우드 서비스 개발 #
- 도메인
- 우리FISA #
- 로드밸런스
- jdk
- 우리FIS아카데미 #
- HTTP
- K-디지털트레이닝
- 우리FISA
- Java
- 맥
- spring
- Gradle
- 클라우드 서비스 개발
- 맥북
- 우리에프아이에스 #
- route 53
- 우리에프아이에스
- M2
- 맥OS
- 리눅스
- 글로벌소프트웨어캠퍼스
- sts
- mysql
- https
- dbeaver
Archives
- Today
- Total
<<개발일지>>
[배열] 6. 뒤집은 소수 본문
6. 뒤집은 소수
설명
N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하는 프로그램을 작성하세요.
예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다.
첫 자리부터의 연속된 0은 무시한다.
입력
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 100,000를 넘지 않는다.
출력
첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.
예시 입력 1
9
32 55 62 20 250 370 200 30 100
예시 출력 1
23 2 73 2 3
<<풀이>>
-나의 풀이-
ㅋㅋ 일단 이 문제는 솔직히 좀 친숙하지 못했다. 그러다 보니 중구난방으로 풀었고, 예시만 정답이 나왔다.
내 풀이도 맞는거 같은데 어디서 틀린 것인지 파악이 되지 않는다.
import java.util.Scanner;
import java.util.Stack;
class Main {
public int[] solution(int n, int[] arr) {
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int[] brr = new int[n];
int index = 0;
for (int x : arr) {
brr[index++] = Integer.parseInt(sb.append(String.valueOf(x)).reverse().toString());
sb.setLength(0);
}
for (int c : brr) {
int count = 0;
for (int i = 2; i < 10; i++) {
if ((c % i == 0 && c >= 10) || c == 1 ) count++;
}
if (count == 0) stack.push(c);
}
int stackSize = stack.size();
int[] answer = new int[stackSize];
for (int i = stackSize - 1; i >= 0; i--) {
answer[i] = stack.pop();
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
for (int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}
stack, stringBuilder 등등 많은 것들을 이용했다.
*stringBuilder 같은 경우 미리 정해둔 배열의 공간을 자유롭게 할 수 있게끔 하면서 메모리 공간을 효율적으로 사용할 수 있다.
하지만 이때, toString을 사용하게 되면 배열에 있던 모든 것들이 합쳐서 출력이 된다. 유용하지만, 상황에 맞지 않으면 원하는 결과 값을 얻지 못한다.
-강사님 풀이-
import java.util.ArrayList;
import java.util.Scanner;
class Main {
public boolean isPrime(int n ){
if (n == 1) return false;
for (int i = 2; i < n; i++) {
if (n % i == 0) return false;
}
return true;
}
public ArrayList<Integer> solution(int n, int[] arr) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
int res = 0;
int tmp = arr[i];
while (tmp > 0) {
int t = tmp % 10;
res = res * 10 + t;
tmp = tmp / 10;
}
if (isPrime(res)) list.add(res);
}
return list;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
for (int x : T.solution(n, arr)) {
System.out.print(x + " ");
}
}
}
와 역시 너무 깔끔하다.
ArrayList를 활용했고
특히나,
while (tmp > 0) {
int t = tmp % 10;
res = res * 10 + t;
tmp = tmp / 10;
}
이 알고리즘이 돋 보인다.
숫자를 거꾸로 하는 여러 방법 중 이렇게 해도 된다.
최근 들어 감탄이 없었는데 오늘 또 한 대 맞고 간다 ㅋㅋ.
'코딩테스트' 카테고리의 다른 글
[배열] 8. 등수구하기 (0) | 2023.12.18 |
---|---|
[배열] 7. 점수 계산 (1) | 2023.12.17 |
[배열] 5. 소수(에라토스테네스 체) (1) | 2023.12.14 |
[배열] 4. 피보나치 수열 (1) | 2023.12.12 |
[배열] 3. 가위 바위 보 (0) | 2023.12.12 |