문제 1078
import java.io.*;
public class Main {
// 정수(1 ~ 100) 1개를 입력받아 1부터 그 수까지 짝수의 합을 구해보자.
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
int b = 0;
for (int i = 1; i<=a; i++){
if (i%2==0) b+=i;
}
System.out.println(b);
}
}
문제 1079
import java.io.*;
public class Main {
// 'q'가 입력될 때까지 입력한 문자를 계속 출력하는 프로그램을 작성해보자.
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] a = br.readLine().split(" ");
for (int i=0;i<a.length; i++){
if (a[i].equals("q")) {
System.out.println(a[i]);
break;
}
else System.out.println(a[i]);
}
}
}
문제 1080
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
//1, 2, 3 ... 을 계속 더해 나갈 때,
//그 합이 입력한 정수(0 ~ 1000)보다 같거나 작을 때까지
//계속 더하는 프로그램을 작성해보자.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
int sum=0, i =0;
while(sum<a){
i++;
sum+=i;
}
System.out.println(i);
}
}
문제 1081
import java.io.*;
public class Main {
//1부터 n까지, 1부터 m까지 숫자가 적힌
//서로 다른 주사위 2개를 던졌을 때 나올 수 있는 모든 경우를 출력해보자.
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] a = br.readLine().split(" ");
int[] b = {Integer.parseInt(a[0]), Integer.parseInt(a[1])};
for (int i = 1; i<=b[0]; i++){
for (int j=1; j<=b[1]; j++){
System.out.printf("%d %d\n", i, j);
}
}
}
}
문제 1082
import java.io.*;
public class Main {
//A, B, C, D, E, F 중 하나가 입력될 때,
//1부터 F까지 곱한 16진수 구구단의 내용을 출력해보자.
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine(), 16); //16진수 변환
for (int i = 1; i<16; i++){
System.out.printf("%X*%X=%X\n", a, i, a*i);
//%x printf("%x", 10); 16진수의 정수, 알파벳 소문자
//%X printf("%X", 10); 16진수의 정수, 알파벳 대문자
//%o printf("%o", 10); 8진수의 정수
}
}
}
문제 1083
import java.io.*;
public class Main {
//1 부터 그 수까지 순서대로 공백을 두고 수를 출력하는데,
//3 또는 6 또는 9인 경우 그 수 대신 영문 대문자 X 를 출력한다.
//10 보다 작은 정수 1개가 입력된다.
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
for (int i =1; i<=a; i++){
if (i%3==0) System.out.print("X ");
else System.out.printf("%d ", i);
}
}
}
문제 1084
import java.io.*;
import java.util.*;
public class Main {
//빨녹파(r, g, b) 각 빛의 강약에 따른 가짓수(0 ~ 128))가 공백을 사이에 두고 입력된다.
//만들 수 있는 rgb 색의 정보를 오름차순으로
//줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력한다.
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[] a = br.readLine().split(" ");
int count = 0;
for (int i = 0; i<Integer.parseInt(a[0]); i++){
for (int j = 0; j<Integer.parseInt(a[1]); j++){
for (int k = 0; k<Integer.parseInt(a[2]); k++){
bw.write(i+" "+j+" "+k+"\n");
count++;
}
}
}
bw.write(String.valueOf(count));
bw.flush();
}
}
BufferedWriter랑 System.out.print랑 크게 차이가 없다고 해서 굳이 안 써왔는데 이제부턴 그냥 BufferedWriter까지 써야겠다..ㅎ 이거때문에 시간초과가 났다.
컴파일 에러는 이번에 문제 풀면서 Array.stream이랑 map 메서드를 처음 써봤는데 이거 때문에 시간초과가 난 줄 알고 배열 변수명 고쳐야하는 지도 모르고 급하게 코드를 고치다가 난 것!
메모리 초과는 다시 String배열에서 Int 배열로 변환하다가 났다..ㅎ 사실 그냥 Integer.parseInt 메서드 사용하면 됐는데 괜히 배열 여러개 만들었다!
아무튼 결론적으로 System.out.print가 아닌 BufferedWriter를 쓰면 된다!
시간 초과 코드!
Array.stream도 처음 써본 코드인데 시간초과가 나서 좀 당황했다 ㅎ
import java.io.*;
import java.util.*;
public class Main {
//빨녹파(r, g, b) 각 빛의 강약에 따른 가짓수(0 ~ 128))가 공백을 사이에 두고 입력된다.
//만들 수 있는 rgb 색의 정보를 오름차순으로
//줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력한다.
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// String[] a = br.readLine().split(" ");
// int[] b = {Integer.parseInt(a[0]), Integer.parseInt(a[1]), Integer.parseInt(a[2])};
int[] a = Arrays.stream(br.readLine().split(" "))
.mapToInt(Integer::parseInt)
.toArray();
int count = 0;
for (int i = 0; i<a[0]; i++){
for (int j = 0; j<a[1]; j++){
for (int k = 0; k<a[2]; k++){
System.out.printf("%d %d %d\n", i, j, k);
count++;
}
}
}
System.out.println(count);
}
}
문제 1085
import java.io.*;
public class Main {
// 입력
// 1초 동안 마이크로 소리강약을 체크하는 수를 h
// 한 번 체크한 결과를 저장하는 비트!! b
// 좌우 등 소리를 저장할 트랙 개수인 채널 c
// 녹음할 시간 s
// 출력 : 필요한 저장 용량을 계산 (저장용량 = h*b*c*s)
// 출력은 bit가 아닌 byte로 나타내므로 /8을 해주어야 함!
// 첫째 자리까지 출력
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[] a = br.readLine().split(" ");
double h = Double.parseDouble(a[0]);
double b = Double.parseDouble(a[1]);
double c = Double.parseDouble(a[2]);
double s = Double.parseDouble(a[3]);
bw.write(String.format("%.1f", (h*b*c*s)/8/1024/1024)+" MB");
bw.flush();
}
}
처음에 h, b, c, s를 int로 했더니 `48000 32 5 300`를 입력값으로 넣으면 에러가 떠서 double로 고쳤다.
int로 하고 그냥 계산할 때 8이 아닌 8.0으로 바꾸어 float로 변환했는데 오버플로우가 발생할 줄 몰랐다!
문제 1086
import java.io.*;
public class Main {
// 입력 : w, h, b 가 공백을 두고 입력된다.
// 출력 : w*h*b
// MB단위로 출력하고 둘째 자리까지 출력
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[] a= br.readLine().split(" ");
float w = Float.parseFloat(a[0]);
float h = Float.parseFloat(a[1]);
float b = Float.parseFloat(a[2]);
bw.write(String.format("%.2f MB", (w*h*b)/8/1024/1024));
bw.flush();
}
}
문제 1087
import java.io.*;
public class Main {
//언제까지 합을 계산할 지, 정수 1개를 입력받는다.
//1부터 순서대로 더해가다가, 그 합이 입력된 정수보다 커지거나 같아지는 경우,
//그때까지의 합을 출력한다.
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 a = Integer.parseInt(br.readLine());
int sum = 0, i = 1;
while(sum<a) {
sum += i;
i++;
}
bw.write(String.valueOf(sum)); //String.valueOf() 필수
bw.flush();
}
}
문제 1088
import java.io.*;
public class Main {
// 정수 1개를 입력받는다. (1 ~ 100)
// 1부터 입력한 정수보다 작거나 같을 때까지 1씩 증가시켜 출력하되
//3의 배수는 출력하지 않는다.
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 a = Integer.parseInt(br.readLine());
for (int i =1; i<=a; i++){
if (i%3!=0) bw.write(String.format("%d ", i));
}
bw.flush();
}
}
문제 1089
import java.io.*;
public class Main {
//시작 값(a), 등차의 값(d), 몇 번째 수 인지를 의미하는 정수(n)가 입력됨.
//n번째 수를 출력
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 a = Integer.parseInt(s[0]);
int d = Integer.parseInt(s[1]);
int n = Integer.parseInt(s[2]);
for (int i = 1; i<n; i++) {
a += d;
}
bw.write(String.valueOf(a));
bw.flush();
}
}
문제 1090
import java.io.*;
public class Main {
// 입력 : 시작 값(a), 등비의 값(r), 몇 번째 인지를 나타내는 정수(n)
// 출력 : n
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(" ");
long a = Integer.parseInt(s[0]);
long r = Integer.parseInt(s[1]);
long n = Integer.parseInt(s[2]);
for (int i = 1; i<n; i++){
a *= r;
}
bw.write(String.valueOf(a));
bw.flush();
}
}
입력값은 int로 받으면 오류가 나서 long이나 double로 받아야한다고한다
난 int형의 더 큰 범위인 long을 사용했다!
문제 1091
import java.io.*;
public class Main {
//입력 : 시작 값(a), 곱할 값(m), 더할 값(d), 몇 번째 인지를 나타내는 정수(n)
//출력 : n
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(" ");
long a = Long.parseLong(s[0]);
long m = Long.parseLong(s[1]);
long d = Long.parseLong(s[2]);
long n = Long.parseLong(s[3]);
for (int i = 1; i<n; i++){
a = a*m+d;
}
bw.write(String.valueOf(a));
bw.flush();
}
}
-50 50 -50 10 입력 시 -99649234693877550가 나와야하므로 int가 아닌 long으로 해야한다.
문제 1092
import java.io.*;
public class Main {
//같은 날 동시에 가입한 인원 3명이 규칙적으로 방문하는,
//방문 주기가 공백을 두고 입력된다.
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 a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
int c = Integer.parseInt(s[2]);
// 최소공배수가 아닌 방법으로 해결해보기
int day = 1;
while(day%a!=0 || day%b!=0 || day%c!=0) day++;
bw.write(String.valueOf(day));
bw.flush();
}
}
int a = Integer.parseInt(br.readLine(), 16); //16진수 변환
%x printf("%x", 10); 16진수의 정수, 알파벳 소문자
%X printf("%X", 10); 16진수의 정수, 알파벳 대문자
%o printf("%o", 10); 8진수의 정수
까먹지 않기!
그나저나 끝으로 갈 수록 늘어가는 오류들...ㅎ
오버플로우가 되지 않도록 데이터형만 주의하면 될 거 같다
'코딩 테스트 일지 📒' 카테고리의 다른 글
[코드업/JAVA] 기초 100제 완료 후기! 🎉 (0) | 2024.08.26 |
---|---|
[코드업/JAVA] 기초 100제 8. 1차원배열&2차원배열 1093-1099 🐘 (2) | 2024.08.26 |
[코드업/JAVA] 기초 100제 6. 조건/선택실행구조&반복실행구조 1065-1077 🐘 (0) | 2024.08.23 |
[코드업/JAVA] 기초 100제 5. 논리연산&비트단위논리연산 1053-1064 🐘 (0) | 2024.08.22 |
[코드업/JAVA] 기초 100제 4. 산술연산&비트시프트연산&비교연산 1038-1052 🐘 (0) | 2024.08.21 |