거북이처럼 천천히

알고리즘 (6월 5일) 본문

Algorithm/알고리즘 문제 풀이

알고리즘 (6월 5일)

유로 청년 2022. 6. 6. 00:17

1. 문제 (코딩도장, Duplicate Numbers)

https://codingdojang.com/scode/488?answer_mode=hide 

 

코딩도장

프로그래밍 문제풀이를 통해서 코딩 실력을 수련

codingdojang.com


2. 생각

0~9까지의 문자로 된 숫자를 입력 받았을 때, 이 입력 값이 0~9까지의 숫자가 각각 한 번 씩만 사용된 것인지 확인하는 함수를 구하시오.

  • sample inputs: 0123456789 01234 01234567890 6789012345 012322456789
  • sample outputs: true false false true false

 

  1. 입력받은 문자열을 숫자로 형변환(Casting)한다. 
  2. 형변환된 숫자를 자리별로 나누어 ArrayList에 추가한다.
  3. 0부터 9까지 담고 있는 ArrayList와 비교하며, 하나씩 하나씩 삭제한다.
  4. 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