[백준]
백준 1152 - 단어의 개수
문제 설명
문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제 입력
The Curious Case of Benjamin Button
예제 출력
6
우선 여기서 구해야할 것은 문장에서 사용된 단어의 수이다.
그러면 Scanner혹은 BufferedRead로 입력을 받고 split 혹은 StringTokenizer를 사용해 공백을 기준으로 나누고 배열에 넣어준다.
그리고 배열의 length를 출력한다.
import java.util.Scanner;
public class Main_1152_단어의개수 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine().trim();
sc.close();
String[] sarr = str.split(" ");
System.out.println(sarr.length);
}
}
//trim 왼쪽 오른쪽에 있는 공백을 다 제거해준다.
그래서 작성한 나의 코드인데 틀렸다..
이유는 아래와 같다.
문자열이 주어질 때 공백만 주어질 수 있다.
공백만 주어진다면 trim()
을 했을 때, 빈 문자열이 되고 만약 이걸 배열에 넣는다면 그 길이는 1이되어서, 단어가 존재하지 않기 때문에 0이 나와야하는데, 1이 나와버린다.
해결
import java.util.Scanner;
public class Main_1152_단어의개수 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine().trim();
sc.close();
String[] sarr = str.split(" ");
if (sarr[0].equals("")) {
System.out.println(0);
} else {
System.out.println(sarr.length);
}
}
}
//trim 왼쪽 오른쪽에 있는 공백을 다 제거해준다.
중간에 str을 받을 때 trim()
으로 공백을 제거해주니 0번째 인덱스의 값이 빈 문자열이 나오는 경우는 공백을 입력한 경우다.
그래서 0번이 공백이면 0을 반환하도록 했다.
백준 2908 - 상수
문제 설명
문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
출력
첫째 줄에 상수의 대답을 출력한다.
예제 입력
734 893
예제 출력
437
해결
import java.util.Arrays;
import java.util.Scanner;
public class Main_2908_상수 {
public static void main(String[] args) {
// 두 수가 주어지는데 이들의 순서를 거꾸로해서 큰수 출력
Scanner sc = new Scanner(System.in);
String A = sc.next();
String [] arrA = A.split("");
String B = sc.next();
String [] arrB = B.split("");
A="";
B="";
for(int i=2; i>=0; i--){
A +=arrA[i];
B +=arrB[i];
}
int M = Math.max(Integer.parseInt(A), Integer.parseInt(B));
System.out.println(M);
// System.out.println(Arrays.toString(arrA));
// System.out.println(Arrays.toString(arrB));
}
}
다른 풀이
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));
String[] str = br.readLine().split(" ");
br.close();
int a = Integer.parseInt(new StringBuilder().append(str[0]).reverse().toString());
int b = Integer.parseInt(new StringBuilder().append(str[1]).reverse().toString());
System.out.println(a>b?a:b);
}
}
백준 5622 - 다이얼
문제 설명
문제
상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.
전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.
할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.
예제 입력
WA
예제 출력
13
해결
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main_5622_다이얼 {
public static void main(String[] args)throws Exception {
//숫자 1을 입력하려면 2초
//+1 할 때마다 +1초
Map<String, Integer> maps = new HashMap<>();
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String [] arr = str.split("");
maps.put("A", 3);
maps.put("B", 3);
maps.put("C", 3);
maps.put("D", 4);
maps.put("E", 4);
maps.put("F", 4);
maps.put("G", 5);
maps.put("H", 5);
maps.put("I", 5);
maps.put("J", 6);
maps.put("K", 6);
maps.put("L", 6);
maps.put("M", 7);
maps.put("N", 7);
maps.put("O", 7);
maps.put("P", 8);
maps.put("Q", 8);
maps.put("R", 8);
maps.put("S", 8);
maps.put("T", 9);
maps.put("U", 9);
maps.put("V", 9);
maps.put("W", 10);
maps.put("X", 10);
maps.put("Y", 10);
maps.put("Z", 10);
int sum=0;
for(int i=0; i<str.length(); i++) {
sum+=maps.get(arr[i]);
}
System.out.println(sum);
}
}
다이얼을 어떻게 설정을 해놔야하는지 고민하다가 Map을 이용해서 설정해 놓았는데 너무 길다.. 다른 방법은 뭐가 있을까?
다른 풀이
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String S = br.readLine();
int time = 0;
for(int i = 0; i < S.length(); i++) {
time += dial(S.charAt(i));
}
System.out.println(time);
}
public static int dial(int ASCII) {
if(ASCII >= 'A' && ASCII <= 'C') return 3;
else if(ASCII <= 'F') return 4;
else if(ASCII <= 'I') return 5;
else if(ASCII <= 'L') return 6;
else if(ASCII <= 'O') return 7;
else if(ASCII <= 'S') return 8;
else if(ASCII <= 'V') return 9;
else if(ASCII <= 'Z') return 10;
return 0;
}
}
아스키 코드를 통해서 푸는 방법이 있고
switch와 case를 이용해서 하는법이 있다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] num = br.readLine().toCharArray();
int sec = 0;
for (char value : num) {
switch(value) {
case 'A': case 'B': case 'C':
sec += 3;
break;
case 'D': case 'E': case 'F':
sec += 4;
break;
case 'G': case 'H': case 'I':
sec += 5;
break;
case 'J': case 'K': case 'L':
sec += 6;
break;
case 'M': case 'N': case 'O':
sec += 7;
break;
case 'P': case 'Q': case 'R': case 'S':
sec += 8;
break;
case 'T': case 'U': case 'V':
sec += 9;
break;
case 'W': case 'X': case 'Y': case 'Z':
sec += 10;
break;
}
}
System.out.println(sec);
}
}
백준11718 - 그대로 출력하기
문제 설명
문제
입력 받은 대로 출력하는 프로그램을 작성하시오.
입력
입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.
출력
입력받은 그대로 출력한다.
예제 입력
Hello Baekjoon Online Judge
예제 출력
Hello Baekjoon Online Judge
해결
import java.util.Scanner;
public class Main_11718_그래도출력하기 {
public static void main(String[] args) {
// 입력받은 그대로 출력
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String str = sc.nextLine();
System.out.println(str);
}
sc.close();
}
}
댓글남기기