[백준] 함수 문제 정리

2022.02.05 네이버 블로그에 정리했던 것!

4673번 셀프 넘버

package 백준함수;
import java.util.*;
public class 셀프넘버 {
	public static int selfNum(int x) {
		int ans=0;
		for(int i=0; i<x;i++) {
			int a=i/1000;
			int b=(i%1000)/100;
			int c=(i%100)/10;
			int d=i%10;
			int[] arr=new int[x];
			for(int j=0;j<x;j++)
				{if(i!=(i+a+b+c+d)) {
					arr[j]=i;
				}
				}
		}
		return arr[];
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for (int i=0; i<10001;i++) {
			int n = selfNum(i);
		}
	}

}
  • 각각 자리수 숫자들 더해서 다르면 배열에 추가하는 식으로 알고리즘을 구현하려 했으나 컴파일시 나오는 값은 계속해서 9999,,
package 백준함수;
import java.util.*;
public class 셀프넘버 {
	public static int selfNum(int x) {
		int sum=x;
		while(x!=0) {
			sum=sum+(x%10); //첫 째 자리수
			x = x/10; //10을 나누어 첫 째 자리를 없앤다
		}
		return sum;
	}
	public static void main(String[] args) {
		boolean[] check = new boolean[10001];
		for (int i=0; i<10001;i++) {
			int n = selfNum(i);
			if(n<10001) {
				check[n]=true;
			}
		}
		StringBuilder sb = new StringBuilder();
        
		for (int i = 1; i < 10001; i++) {
			if (!check[i]) {	// false 인 인덱스만 출력
				sb.append(i).append('\n');
			}
		}
		System.out.println(sb);
	}
	}
  • StringBuilder 클래스

    	새로운 객체를 만들지 않고도 자유롭게 문자 변경 작업을 할 수 있다.
    
    	문자열이 커질수록 자동으로 크기를 추가하기 때문에 초기에 주는 생성자에 크기값을 줄 필요가 크게 없다.
    
    	가장 많이 사용하는 문자 추가 메소드:append
  • 생각 못한 부분:

    	boolean 배열을 통해 참 거짓으로 셀프 넘버를 구별할 수 있을 줄이야 boolean 배열을 생각지도 못하고 있었다
  • if(n<10001)

    	check[n]=true 같이 다 true로 여기고 StringBuilder 클래스를 통해 문자열을 추가하여 false인 인덱스만 출력하기..! !check[i]도 또다른 거짓의 표현임을 되새김

1065번 한수

public class 한수 {
	public int function(int x) {
		int a=x/100;
		int b=(x%100)/10;
		int c=x%10;
		int cnt = 0;
		if((a-b)==(b-c)) 
			{cnt++;}
		return cnt;
	}
  • 배열을 쓰자!! 위에는 틀림
    반복되는 구간이 있어야 하는데 그걸 간과함
    그리고 0~99까지는 한수인 걸 놓침. 그 이후 수는 cnt=99부터 매기자
import java.util.*;
public class 한수 {
	public static int function(int x) {
		if(x<100) {
			return x;
		}
		else {
		int cnt=99;
		for(int i=100;i<=x;i++) {
		int a=i/100;
		int b=(i%100)/10;
		int c=i%10;

		if((a-b)==(b-c)) 
			{cnt++;}
		}
		return cnt;
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		System.out.print(function(sc.nextInt()));
	}

}

좋은 웹페이지 즐겨찾기