-
[백준 알고리즘] 단계별로 풀어보기 - 2단계 조건문 JAVA코딩테스트/백준 2023. 4. 27. 11:03
https://www.acmicpc.net/step/4
📑 Q9498
<IF-ELSE문 사용>
package step2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q2_9498 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(br.readLine()); if (num > 100 || num < 0) { System.out.println("score between 0 and 100"); } else if (num >= 90) { System.out.println("A"); } else if (num >= 80) { System.out.println("B"); } else if (num >= 70) { System.out.println("C"); } else if (num >= 60) { System.out.println("D"); } else { System.out.println("F"); } /*while (true) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(br.readLine()); if (num > 100 || num < 0) { System.out.println("score between 0 and 100"); } else if (num >= 90) { System.out.println("A"); break; } else if (num >= 80) { System.out.println("B"); break; } else if (num >= 70) { System.out.println("C"); break; } else if (num >= 60) { System.out.println("D"); break; } else { System.out.println("F"); break; } }*/ } }
<SWITCH-CASE문 사용>
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main (String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int score=Integer.parseInt(br.readLine()); switch(score/10) { case 10: System.out.print("A"); break; case 9 : System.out.print("A"); break; case 8 : System.out.print("B"); break; case 7 : System.out.print("C"); break; case 6 : System.out.print("D"); break; default: System.out.print("F"); } } }
📑 Q2753
package step2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q3_2753 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int year = Integer.parseInt(br.readLine()); if ((year % 4 == 0 && !(year % 100 == 0) || year %400==0)) { System.out.println("1"); } else { System.out.println("0"); } } }
📑 Q2884
package step2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q5_2884_2 { private static final int MAX_HOUR = 24; private static final int MAX_MINUTE = 60; private static final int MIN_HOUR = 0; private static final int MIN_MINUTE = 0; public static void main(String[] args) throws IOException { while(true) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); String[] timeArr = str.split(" "); //" " 를 기준으로 문자열을 분리하여 배열에 저장한다. int h = Integer.parseInt(timeArr[0]); int m = Integer.parseInt(timeArr[1]); int time = m - 45; if (time >= 0) { System.out.print(h+" "+time); } else { if (h ==0) { h = MAX_HOUR - 1; } else if(h>0 && h<24) { h = h - 1; } m = MAX_MINUTE + time; System.out.print(h+ " "+m); } } } }
위에는 String 형의 arr을 생성한 후 만약 " " 가 있으면 split으로 문자열을 분리했다.
아래는 StringTokenizer를 이용한 것인데, 예제 코드 아래서 StringTokenize를 살펴보자
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int h = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); br.close(); StringBuilder sb = new StringBuilder(); if (m < 45) { if (h == 0) { h = 23; sb.append(h).append(" "); } else { h--; sb.append(h).append(" "); } sb.append(m = 60 - (45 - m)); } else { sb.append(h).append(" ").append(m - 45); } System.out.print(sb); } }
🎈 StringTokenizer
Java의 StringTokenizer는 문자열을 분리하고 파싱하기 위한 유틸리티 클래스입니다. 주어진 문자열을 구분자(delimiter)를 기준으로 분리하여 토큰(token)이라는 부분 문자열들로 쪼갭니다. 이를 통해 문자열을 보다 쉽게 처리할 수 있습니다.
StringTokenizer 클래스는 java.util 패키지에 속해 있습니다. 다음과 같은 생성자를 사용하여 객체를 생성할 수 있습니다:public StringTokenizer(String str)
public StringTokenizer(String str, String delim)
public StringTokenizer(String str, String delim, boolean returnDelims)첫 번째 생성자는 기본적으로 문자열을 공백으로 분리합니다. 두 번째 생성자는 구분자를 지정할 수 있으며, 세 번째 생성자는 구분자를 반환할지 여부를 결정합니다.
예를 들어, 다음과 같은 코드를 사용하여 문자열을 분리할 수 있습니다:
String input = "apple,banana,kiwi,orange";
StringTokenizer tokenizer = new StringTokenizer(input, ",");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
System.out.println(token);
}
위 코드는 "apple", "banana", "kiwi", "orange"라는 4개의 토큰을 출력합니다. 이와 같이 StringTokenizer는 문자열을 효율적으로 파싱하기 위한 유용한 도구입니다.📑 Q2525
앞에 문제는 45라는 고정적인 시간을 빼주는 것이라면 이번 문제는 원하는 시간 만큼을 더해주는 문제이다. 처음에 시간을 현재 타임으로 해야되는줄 알고 LocalTime을 이용했었는데 계속 런타임에러가 뜨길래 봤더니 시간도 직접 입력하는 것.
package step2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Q6_2525_3 { public static void main(String[] args) throws IOException { while(true) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int currentHour = Integer.parseInt(st.nextToken()); int currentMinute = Integer.parseInt(st.nextToken()); int inputCookTime = Integer.parseInt(br.readLine()); int totalMinute = (currentHour * 60) + currentMinute; totalMinute += inputCookTime; int ovenHour = (totalMinute / 60) % 24; int ovenMinute = totalMinute % 60; System.out.println(ovenHour + " " + ovenMinute); } } }
아래는 틀렸던 내 코드이다.
package step2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.time.LocalTime; public class Q6_2525 { public static void main(String[] args) throws IOException { while(true) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); LocalTime now = LocalTime.now(); int currentHour = now.getHour(); int currentMinute = now.getMinute(); System.out.println(currentHour + " " + currentMinute); int inputCookTime = Integer.parseInt(br.readLine()); int totalCookTime = currentMinute + inputCookTime; // StringBuilder builder = new StringBuilder(); if ((totalCookTime) < 60) { currentMinute = totalCookTime; //System.out.println(builder.append(currentHour).append(" ").append(currentMinute)); System.out.println(currentHour + " " + currentMinute); } else { int plusHour = totalCookTime / 60; currentHour = currentHour + plusHour; currentMinute = totalCookTime - (60 * plusHour); // System.out.println(builder.append(currentHour).append(" ").append(currentMinute)); System.out.println(currentHour + " " + currentMinute); } } } }
📑 Q2480
나는 아래와 같이 풀었는데 보니까 Math 클래스에 max 메서드가 정의되어있다.
package step2; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Q7_2480 { public static void main(String[] args) throws IOException { while(true) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); int c = Integer.parseInt(st.nextToken()); int prize = 0; if (a == b && a == c && b == c) { prize = 10000 + (a * 1000); } else if (a == b || a == c || b == c) { prize = 1000 + (samNum(a, b, c) * 100); } else { prize = maxNum(a, b, c) * 100; } System.out.println(prize); } } public static int maxNum(int a, int b,int c){ int maxNum = 0; maxNum = a>b?a:b; maxNum = maxNum>c?maxNum:c; return maxNum; } public static int samNum(int a, int b, int c){ int sameNum = 0; if(a==b || a==c){ sameNum = a; }else if(b==c){ sameNum= c; } return sameNum; } }
아래와같이 풀어도 된다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int a, b, c; a = Integer.parseInt(st.nextToken()); b = Integer.parseInt(st.nextToken()); c = Integer.parseInt(st.nextToken()); // 만약 모든 변수가 다른 경우 if (a != b && b != c && a != c) { int max = Math.max(a, Math.max(b, c)); System.out.println(max * 100); } // 3개의 변수가 모두 같은 경우 else if (a == b && a == c) { System.out.println(10000 + a * 1000); } // a가 b혹은 c랑만 같은 경우 else if(a == b || a == c) { System.out.println(1000 + a * 100); } // b가 c랑 같은 경우 else { System.out.println(1000 + b * 100); } } }
반응형'코딩테스트 > 백준' 카테고리의 다른 글
[백준] 2908번 - 숫자 뒤집기(JAVA) (0) 2023.07.07 [백준 알고리즘] 단계별로 풀어보기 - 4단계 1차원 배열 JAVA (0) 2023.06.20 [백준 알고리즘] 10811번 바구니 뒤집기 - JAVA (0) 2023.06.20 [백준 알고리즘] 단계별로 풀어보기 - 3단계 반복문 JAVA (0) 2023.06.02 [백준 알고리즘] 단계별로 풀어보기 1단계 JAVA (0) 2023.04.14