728x90
알고리즘 생각
자연수 N이 주어졌을 때 N의 가장 작은 생성자 구하기
ex) 216이 주어졌다면 생성자는 198
198+1+9+8 = 216
구해야되는 숫자 x, 그 숫자의 각 자릿수를 더해서 N이 나와야함
num을 조건으로 for문 돌려서 i를 증가시키면서 조건문에 값과 각 자릿수의 합이 num인 거 찾으면 끝나
for(int i=0;i<num;i++) {
if(i + (i%100)+(i/10)%10+(i%10) == num) {
System.out.println(i);
break;
}
}
이렇게 했는데 99 가 출력됨. 조건식에서 99+99+9+9 돼서 216은 맞지만 자릿수를 더한게 아니게 됐음.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class MainApp{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String strnum = br.readLine(); //숫자하나 입력받음 -> 일단 문자로 받음 !
int numlength = strnum.length();
int x =0;
int sum = 0;
int i;
int num = Integer.parseInt(strnum);
for(i=10;i<num;i++) {
sum = i % 10; //1의자릿수
x = i / 10;
for(int j=1;j<numlength;j++) {//몇 자리수인지에 따라 자릿수를 구하는 반복문
sum += x % 10;//10의자릿수
x = x / 10;
sum += x; //100의자릿수 3자리라고 가정했을 때
if(Integer.toString(x).length()==1)
break;
}
if(sum+i == num) {
System.out.println(i);
break;
}
}}
}
이렇게 했는데 틀렸다고 뜸 그 생성자가 없을 때 0 출력한다는 조건을 만족 못 해서 일어난 일
근데 나는 코드가 너무 어린이 코드같다 ... 더 멋있게 하는 방법을 찾아봐야겠어
자릿수 구하는 알고리즘이 저렇게 되면 안 될 거 같다.
1시간 45분만에 맞췄다 .. ㅋㅋㅋㅋ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class MainApp{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String strnum = br.readLine(); //숫자하나 입력받음 -> 일단 문자로 받음 !
int sum = 0;
int result =0;
int num = Integer.parseInt(strnum);
String []numarr = new String[10000]; //문자열 배열
for(int j = num/2;j<num; j++) {
sum=0;
numarr[0] = Integer.toString(j); //계속 검증해줄 수를 문자열로 만들어서 배열에 넣음
for(int i=0;i<numarr[0].length();i++) {// 자리수를 다 더하는 반복문
sum += Character.getNumericValue(numarr[0].charAt(i));
}
if(j+sum==num) {
result = j;
break;
}
}
System.out.println(result);
}
}
** 새로 알게된 것 숫자를 찢을 때
각 자리의 수를 구하고 싶은 숫자를 문자열 배열에 넣고
그 숫자를 charAt을 이용해서 문자로 하나씩 찢는다. -> 그리고 정수형으로 변경.
문자-> 정수형 : 사용한 함수 Character.getNumericValue(Char c) ;
숫자 -> 문자열 : Integer.toString(int 값);
문자열 -> 숫자 : Integer.parseInt(문자열 값);
문자열 -> 문자 : String.charAt(인덱스)
문자 -> 숫자 : Character.getNumericValue(Char값);
728x90
'알고리즘 > 백준' 카테고리의 다른 글
4153번 문제 : 직각삼각형 (0) | 2023.03.10 |
---|---|
2292번 문제 : 벌집 (0) | 2023.03.08 |
11651번 문제 : 좌표정렬 2 (0) | 2023.03.06 |
11650번 문제 : 좌표 정렬하기 (0) | 2023.03.06 |
백준 깃허브에 commit 돼있는 거 local로 받아오기 (0) | 2023.02.28 |