1단계 : 11654번 / 아스키 코드
알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
char N = sc.next().charAt(0);
int num = (char) N;
System.out.println(num);
}
}
cf)
// java는 문자만을 입력받는 기능이 없음.
// 따라서 문자열을 입력받은 후, 가장 첫번째 문자를 꺼내와야 한다.
// '문자' 변수 N
char N;
// sc.next() => 문자열을 입력 받음.
// .charAt(0)를 통해 문자열의 가장 첫번째 문자를 특정.
N = sc.next().charAt(0);
2단계 : 11720번 / 숫자의 합
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String C = sc.next(); // 문자열을 입력 받음
int sum = 0;
for(int i=0; i<N; i++){
sum += (int)C.charAt(i) - 48;
}
System.out.println(sum);
}
}
알아야 할점 : 문자 '0', '1', '2', '3', ~ , '9'는 순서대로 아스키 코드 값 48 ~ 57을 가지고 있다.
3단계 : 10809번 / 알파벳 찾기
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String C = sc.next(); // 문자열을 입력 받음
int[] check = new int[26]; // a: 0, ~ , z: 26
for(int i=0; i<26; i++){check[i] = -1;} // 배열 초기화
for(int i=0; i<C.length(); i++){
if (check[((int)C.charAt(i)-97)] != -1){continue;} // 처음 등장하는 위치 판별 // 이미 등장한 문자일 경우 패스
else {check[((int)C.charAt(i)-97)] = i;}
}
for(int i=0; i<26; i++){
System.out.print(check[i]+" ");
}
}
}
4단계 : 2675번 / 문자열 반복
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.
QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int i=0; i<T; i++){
StringBuilder sb = new StringBuilder();
int R = sc.nextInt();
String S = sc.next();
for (int k=0; k<S.length(); k++){
for (int j=0; j<R; j++){
sb.append(S.charAt(k));
}
}
System.out.println(sb);
}
}
}
* StringBuilder의 append()를 통해 순서대로 문자를 문자열에 추가
5단계 : 1157번 / 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String S = sc.next();
S = S.toLowerCase(); // 문자열 소문자로 변환
int[] count = new int[26]; // 배열 초기값 = 0
for(int i=0; i<S.length(); i++){
count[(int)S.charAt(i) - 97]++;
}
int max = -1;
int max_index = -1;
boolean flag = false;
for(int i=0; i<26; i++){
if (count[i]>max){max=count[i]; max_index=i;}
}
for(int i=0; i<26; i++){
if ((count[max_index] == count[i]) && max_index != i){
flag = true;
break;
}
}
if(flag){System.out.println("?");}
else {System.out.println((char) (max_index + 65));} // 대문자로 출력
}
}
6단계 : 1152번 / 단어의 개수
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String S = sc.nextLine();
int count = 0;
for(int i=0; i<S.length(); i++){
if (S.charAt(i) == ' '){
count ++;
}
}
if ((S.charAt(0) == ' ')){
count --;
}
if ((S.charAt(S.length() -1) == ' ')){
count --;
}
System.out.println(count + 1);
}
}
* 문자열의 첫 문자가 공백인 경우, 마지막이 공백인 경우 예외처리
* 공백 + 1 = 단어 수
cf) next() : 공백전까지 입력 받기 , nextLine() : 엔터 전까지 입력받기
7단계 : 2908번 / 상수
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String N1 = sc.next();
String N2 = sc.next();
int number1 = 0; int number2 = 0;
for (int i=2; i>-1; i--){
number1 = number1 + ((int)N1.charAt(i)-48)*((int)Math.pow(10, i));
number2 = number2 + ((int)N2.charAt(i)-48)*((int)Math.pow(10, i));
}
if (number1 > number2){System.out.println(number1);}
else {System.out.println(number2);}
}
}
8단계 : 5622번 / 다이얼
상근이의 할머니는 아래 그림과 같이 오래된 다이얼 전화기를 사용한다.
전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.
할머니가 외운 단어가 주어졌을 때, 이 전화를 걸기 위해서 필요한 최소 시간을 구하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String S = sc.next();
int time = 0; int sum = 0;
for(int i=0; i<S.length(); i++){
switch (S.charAt(i)) {
case 'A': case 'B': case 'C':
time = 3; // 2
break;
case 'D': case 'E': case 'F':
time = 4; // 3
break;
case 'G': case 'H': case 'I':
time = 5; // 4
break;
case 'J': case 'K': case 'L':
time = 6; // 5
break;
case 'M': case 'N': case 'O':
time = 7; // 6
break;
case 'P': case 'Q': case 'R': case 'S':
time = 8; // 7
break;
case 'T': case 'U': case 'V':
time = 9; // 8
break;
case 'W': case 'X': case 'Y': case 'Z':
time = 10; // 9
break;
default:
break;
}
sum = sum + time;
}
System.out.println(sum);
}
}
9단계 : 2941번 / 크로아티아 알파벳
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String S = sc.next();
int count = 0;
for(int i=0; i<S.length(); i++){
switch (S.charAt(i)) {
case '=': // c=, s=, z=, dz=
if ((S.charAt(i-1) == 'c') || (S.charAt(i-1) == 's')){break;}
else if((S.charAt(i-1) == 'z')){
if (i>1){ // dz=
if (S.charAt(i-2) == 'd'){
count = count - 1; break;
}
}
break; // d=
}
case '-':
if ((S.charAt(i-1) == 'd') || (S.charAt(i-1) == 'c')){
break;
}
case 'j':
if(i > 0){
if ( ((S.charAt(i-1) == 'l') || (S.charAt(i-1) == 'n'))){
break;
}
}
default:
count ++;
break;
}
}
System.out.println(count);
}
}
하드코딩인 느낌 가득..
* 크로아티아 알파벳의 뒤 문자 '=', '-', 'j' 로 특정
* 앞문자를 탐색하여 크로아티아 알파벳 여부 판단 (i-1 > 0인지 미리 고려하여 "런타임 에러 (StringIndexOutOfBounds)"의 가능성을 줄여야 함)
10단계 : 1316번 / 그룹 단어 체커
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int count = 0;
for(int i=0; i<N; i++){
String S = sc.next();
boolean flag = false;
int[] check = new int[26];
for(int j=0; j<26; j++){// init = -1
check[j] = -1;
}
for(int j=0; j<S.length(); j++){
if(check[((int)S.charAt(j) - 97)] == -1){
check[((int)S.charAt(j) - 97)] = j;
flag = true;
}
else{
if (j - check[((int)S.charAt(j) - 97)] != 1){
flag = false;
break;
}else{
check[((int)S.charAt(j) - 97)] = j;
flag = true;}
}
}
if(flag){count++;}
}
System.out.println(count);
}
}
'백준 > 단계별로 풀어보기' 카테고리의 다른 글
백준 - 단계별로 풀어보기 - JAVA (8단계 : 기본 수학 2 / 6문제) (2022.12.27 화) (0) | 2022.12.27 |
---|---|
백준 - 단계별로 풀어보기 - JAVA (7단계 : 기본 수학 1 / 8문제) (2022.12.26 월) (0) | 2022.12.26 |
백준 - 단계별로 풀어보기 - JAVA (5단계 : 함수 / 3문제) (2022.12.25 일) (1) | 2022.12.25 |
백준 - 단계별로 풀어보기 - JAVA (4단계 : 1차원 배열 / 9문제) (2022.12.24 토) (2) | 2022.12.24 |
백준 - 단계별로 풀어보기 - JAVA (3단계 : 반복문 / 12문제) (2022.12.23 금) (0) | 2022.12.23 |