Algorithm Study/Java

[코드업 자바] # 1084 [기초-종합] 빛 섞어 색 만들기

728x90
반응형

코드업 자바

# 1084 [기초-종합] 빛 섞어 색 만들기

 

링크 : https://codeup.kr/problem.php?id=1084

 

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

C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요.  - 모든 내용

codeup.kr

 

 

내 풀이_시간 초과

import java.util.Scanner;

public 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 count = 0;
        for(int i=0; i<a; i++)
        {
            for(int j = 0; j<b; j++)
            {
                for(int k=0; k<c; k++)
                {
                    System.out.println(i+" "+j+" "+k);
                    count += 1;
                }
            }
        }
        System.out.println(count);
    }
}

 

  • 자바 문제를 풀면서 시간 초과를 처음 맞딱뜨렸다
  • 자바의 Scanner는 입력 속도가 느리다고 한다. Scanner를 대신하기 위해 BufferdReader를 사용할 수 있따
    • cf. python에서 input() 대신 sys.stdin.readline()을 쓰는 방식과 비슷해 보인다

 

시간초과 문제 해결

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));
        String[] s = br.readLine().split(" ");

        int count = 0;
        for(int i=0;i<Integer.valueOf(s[0]); i++) {
            for(int j=0;j<Integer.valueOf(s[1]); j++) {
                for(int k=0;k<Integer.valueOf(s[2]); k++) {
                    bw.write(i+" "+j+" "+k+"\n");
                    count++;
                }
            }
        }
        bw.write(String.valueOf(count));
        bw.flush();
    }
}

 

  • BufferedReader를 사용하기 전 throws IOException{} 을 적용해주어야 한다
  • InputStreamReader() 에는 System.in, OutputstreamWriter() 에는 System.out 을 넣어야 한다
  • BufferedReader는 String으로 입력값을 받게 되므로 형변환을 반드시 해주어야 한다
    • String[] s : String 리스트 s를 만들어 br.readLine()값을 입력한다. split()을 통해 분리 기준을 설정할 수 있다
  • BufferedReader를 통해 만든 변수의 출력은 bw.write()를 사용한다. 출력에 대해서도 String으로 형 변환을 해주어야 한다
  • bw.flush() 를 통해 버퍼를 초기화해야 한다 (안하면 출력이 진행되지 않았음)

 

꽤나 애먹었다. Buffer를 이용한 입출력 사용법에 익숙해지도록 하자.