코드업 기초 1-100완료 [1084]

2022. 2. 9. 18:41알고리즘/코딩테스트(코드업)

코드업 100문제를 풀었다(하루에 10문제, 1/30~2/8)

기초 문제라 금방 풀 수 있었는데, 조금 헤맸던 세 문제가 있어

기록하고자 글을 남긴다.

문제 번호 =    [84, 98, 99]

1084 : [기초-종합] 빛 섞어 색 만들기(설명)

 

빨강(red), 초록(green), 파랑(blue) 빛을 섞어
여러 가지 빛의 색을 만들어 내려고 한다.

빨강(r), 초록(g), 파랑(b) 각각의 빛의 개수가 주어질 때,
(빛의 강약에 따라 0 ~ n-1 까지 n가지의 빛 색깔을 만들 수 있다.)

주어진 rgb 빛들을 다르게 섞어 만들 수 있는 모든 경우의 조합(r g b)과
총 가짓 수를 계산해보자.

 

빨녹파(r, g, b) 각 빛의 강약에 따른 가짓수(0 ~ 128))가 공백을 사이에 두고 입력된다.
예를 들어, 3 3 3 은 각 색깔 빛에 대해서 그 강약에 따라 0~2까지 3가지의 색이 있음을 의미한다.

 

입력 예시  

2 2 2

출력 예시

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

8

 

이 문제를 보자마자 for 문을 중첩하면 쉽게 풀 수 있을거라 생각해서

	import java.util.*;

	class Main{
	    public static void main(String[] args){
	  
	        Scanner sc = new Scanner(System.in);
	        int a = sc.nextInt();
	        int b = sc.nextInt();
	        int c = sc.nextInt();
	        int num = 0;
	        for(int i=0; i<a; i++){
	            for(int j =0; j<b; j++){
	                for(int k = 0; k<c; k++){
	                System.out.printf("%d %d %d%n", i,j,k);
	              
	                num++;    
	                }
	            }
	        }
	        System.out.println(num);
	    }
	}

바로 제출했는데 얄짤없이 시간초과가 떴다.

 

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

class Main{
    public static void main(String[] args) throws Exception{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
       String[] str = br.readLine().split(" ");
       
        int num = 0;
        for(int i=0; i<Integer.valueOf(str[0]); i++){
            for(int j =0; j<Integer.valueOf(str[1]); j++){
                for(int k = 0; k<Integer.valueOf(str[2]); k++){
             	bw.write(i + " " + j + " " + k + "\n");
                num++;    
                }
            }
        }
        bw.flush();
        System.out.println(num);
  
    }
}

바로 BufferedReader, BufferedWriter 써서 혼내줬다.

이것이 가능한 이유는, 버퍼 방식은 키보드의 입력이 있을 때마다

한 문자씩 버퍼로 전송하며 버퍼가 가득 차거나, 개행 문자가 나타나면 버퍼의 내용을 한방에 전송하기 때문이다.

 

버퍼 리더는 한 줄을 통째로 받는 방식이라,  1 2 3 4 5 6 7 8 9 10.... 과 같이 한 줄로 입력이 들어올 때

스캐너보다 효율이 훨씬 좋다.

 

근데 스캐너가 편하긴 하다.

 

'알고리즘 > 코딩테스트(코드업)' 카테고리의 다른 글

코드업 기초 1-100완료 [1099]  (0) 2022.02.09