200929 화 [BOJ] 11653, 1978

kyuhyun·2020년 9월 28일
0

1일1고리즘

목록 보기
16/20

BOJ 11653

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {	

	
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	
    	int N = Integer.parseInt(br.readLine());
    	br.close();
    	
    	int i = 2;
    	while(N != 1) {
    		if(N%i==0) {
    			bw.write(i + "\n");
    			N /= i;
    		} else {
    			i++;
    		}
    	}
    	
       	bw.flush();    	
    	bw.close();
    }
}

BOJ 1978

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {	

	
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	
    	int N = Integer.parseInt(br.readLine());
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	br.close();
    	
    	int cnt = 0;
    	boolean flag;
    	for(int i=0;i<N;i++) {
    		int num = Integer.parseInt(st.nextToken());
    		if(num==1)
    			continue;
    		flag = true;
    		for(int j=2;j<num;j++) {
    			if(num%j == 0) {
    				flag = false;
    				break;
    			}
    		}
    		if(flag)
    			cnt++;
    	}
    	bw.write(String.valueOf(cnt));
    	
    	
       	bw.flush();    	
    	bw.close();
    }
}




기존의 내가 풀었던 방식은 예제와 같은 값은 나오는데, 계속 결과는 틀렸습니다가 나왔다.
(아래는 그 코드)

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {	

	
    public static void main(String[] args) throws IOException {
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    	
    	int N = Integer.parseInt(br.readLine());
    	StringTokenizer st = new StringTokenizer(br.readLine());
    	br.close();
    	int cnt = 0;
    	for(int i=0;i<N;i++) {
    		int num = Integer.parseInt(st.nextToken());
    		if(num==1)
    			continue;
    		for(int j=2;j<num;j++) {
    			if(num%j==0)
    				break;
    			else if (j==num-1)
    				cnt++;
    		}
    	}
    	bw.write(String.valueOf(cnt));
    	
    	
       	bw.flush();    	
    	bw.close();
    }
}

데이터를 임의로 많이 추가해보았더니, 2일 경우를 흘리고 있었다는 걸 발견할 수 있었다.

if (num==2) {
	cnt++;
    continue;
}

그래서 for문 안에 위 코드를 추가했더니 맞았다.


profile
알고리즘은 즐거워

0개의 댓글