Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DHT11
- Edge Detector
- uart 통신
- ring counter
- vivado
- verilog
- soc 설계
- atmega 128a
- KEYPAD
- behavioral modeling
- dataflow modeling
- test bench
- hc-sr04
- i2c 통신
- Algorithm
- Recursion
- gpio
- prescaling
- stop watch
- java
- structural modeling
- Linked List
- FND
- pwm
- LED
- half adder
- BASYS3
- ATMEGA128A
- D Flip Flop
- Pspice
Archives
- Today
- Total
거북이처럼 천천히
알고리즘 (6월 5일) 본문
1. 문제 (코딩도장, Duplicate Numbers)
https://codingdojang.com/scode/488?answer_mode=hide
2. 생각
0~9까지의 문자로 된 숫자를 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오.
- sample inputs: 0123456789 01234 01234567890 6789012345 012322456789
- sample outputs: true false false true false
- 입력받은 문자열을 숫자로 형변환(Casting)한다.
- 형변환된 숫자를 자리별로 나누어 ArrayList에 추가한다.
- 0부터 9까지 담고 있는 ArrayList와 비교하며, 하나씩 하나씩 삭제한다.
- 0부터 9까지 담고 있던 ArrayList의 원소가 다 삭제가 되어 size가 0가 되면 "true"를 출력시킨다.
3. 풀이 및 코드 분석
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArrayList<Integer> inputNumbers = new ArrayList<>();
ArrayList<Integer> compareNumbers = new ArrayList<>(Arrays.asList(0,1,2,3,4,5,6,7,8,9));
System.out.println("0~9까지의 숫자가 각각 한 번 씩만 사용된 문자열 입력하시오: (ex, 6789012345)");
String inputData = scan.next();
if(inputData.length() != 10) {
System.out.println("False");
}else {
long numbers = Long.parseLong(inputData);
int j = 10;
while(j>0) {
inputNumbers.add((int)(numbers%10));
numbers /= 10;
j--;
}
for(int i=0; i<inputNumbers.size(); i++) {
if(compareNumbers.remove(inputNumbers.get(i)) == false) {
System.out.println("False");
}
}
if(compareNumbers.size()== 0) {
System.out.println("True");
}
}
}
}
4. 메모
- int형의 숫자(number)를 각각의 자릿수 구하는 방법
int형의 숫자(number)를 10으로 나눈 나머지를 저장하고, 10으로 나눈 몫을 다시 int형의 숫자(number)에 대입한다.
위 과정을 반복하게 되면 일의 자리, 십의 자리, 백의 자리 ···· 순으로 얻을 수 있다. - ArrayList.remove의 리턴 값
ArrayList.remove(객체) 는 삭제한 결과(true, false)를 리턴하며,
ArrayList.remove(인덱스)는 삭제된 항목 내용을 리턴한다. - NumberFormatException 에러 원인
case 1. 숫자로 변경할시 숫자형이 아닌 문자열일 경우 ( 주로 발생 )
case 2. 변경하는 자료형보다 범위가 큰경우
case 3. null 입력시
case 4. 문자 앞뒤로 공백이 있는 경우
'Algorithm > 알고리즘 문제 풀이' 카테고리의 다른 글
알고리즘 (6월 7일) - (2) (0) | 2022.06.07 |
---|---|
알고리즘 (6월 7일) (0) | 2022.06.07 |
알고리즘 (6월 6일) (0) | 2022.06.06 |
알고리즘 (6월 3일) (0) | 2022.06.03 |
알고리즘(6월 2일) (0) | 2022.06.02 |