자바문제[3자리 마다 , 찍기]

이수보🧑🏻‍💻·2022년 1월 12일
0

문제

목록 보기
5/6


내가 좋아하는 푸라닭 후라이드 가격~

앞서 우리는 String 클래스의 다양한 메소드들을 보았습니다.

그럼 이 메소드들 그냥 지나갈 수 없죠 당연히 응용타임입니다.

배운 String 메소드를 사용하여 다음의 문제를 같이 풀어 봅시다 ㅎㅎ

문제 들어갑니다.
1. 사용자에게 숫자를 입력받습니다.
2. 입력 받은 숫자에 3 자리마다 , (쉼표)를 붙여 출력해주세요.

ex) 입력 : 123456789 -> 123,456,789

Hint!!

  • 맨 앞에는 ,를 붙여서는 안됩니다. 그러니 뒤에서 부터 돌아보는 것이 좋겠죠?
  • 3 자리를 세어주며 , 를 붙여주면 될 것입니다..
  • 정답
		System.out.println("숫자를 입력해주세요.");
		String sc = ScanUtil.nextLine();
		
		String sum = "";
		
		int count = 0;
		for (int i = sc.length() -1; i >= 0; i--) {
			sum = sc.charAt(i) + sum;
			count++;
			if(count % 3 == 0 && count != sc.length()){
				sum = "," + sum;
			}
		}
		System.out.println(sum);
	
  • 문제가 너무 이해 안되거나 하는 분들은 저랑 같이 순서대로 살펴 봅시다.
  1. Scanner 를 이용하여 사용자에게 숫자를 입력 받습니다.
  1. 숫자를 거꾸로 저장하기 위해 for문을 입력받은 길이만큼 거꾸로 돌립니다.
    -1 은 인덱스를 생각해보면 바로 이해할 수 있습니다.
  1. 숫자를 세어줄 count를 선언하고
  1. 거꾸로 돌아가는 for문의 i를 사용하여 뒤에서부터 문자를 한 자리씩 빼냅니다.
  1. 처음 빼내온 문자를 sum에 저장합니다.
  1. 만약 sum에 내용이 있다면 다음 문자 뒤에 붙여 줍니다.
  1. count를 증가시켜 주고
  1. 만약 count가 3 과 같거나 첫 자리는 , 를 빼야 하니 길이와 같지 않을 때
    sum 사이사이에 " , " (쉼표)를 붙여줍니다.
  • 다른 방법
public class main{

    public static void main(String[] args){

        int money = 100000000;
        int interval = 3;

        // int를 String으로
        String change = String.valueOf(money);

        // 쉼표가 존재할 수 없는 앞 부분의 개수
        int noPoint = change.length() % interval;

        if(noPoint == 0){
            noPoint = interval;
        }

        String result = "";

        for(int i = 0; i < change.length(); i++){
            // noPoint를 쉼표 간격만큼 더해주며 , 를 +
            if(i == noPoint){
                result += ",";
                noPoint += interval;
            }
            result += String.valueOf(change.charAt(i));
        }

        System.out.println(result);
    }
}
  • 더욱 쉬운 방법

		DecimalFormat df = new DecimalFormat("###,###");	
		
		return String.valueOf(df.format());

쉽죠잉~? 다음에 또 다른 문제로 찾아올게요

0개의 댓글