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 |
---|