백준
백준 닷컴 단계 별로 풀어보기 5단계
CD가참둥그렇다
2023. 9. 21. 13:50
1단계 문자와 문자열
- 단어 s와 정수가 주어졌을 때, s의 i번째 글자를 출력하는 프로그램을 작성하시오.
import java.util.Scanner;
public class Step_1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
int a = scan.nextInt();
String alp = str.substring(a-1, a);
System.out.println(alp);
}
}
A.
- String str을 선언하고 입력 문자열로 초기화한다.
- int a를 선언하고 입력된 숫자로 초기화한다.
- 정답으로 출력할 알파벳을 String alp로 선언하고 str.substring(a-1, a)를 통해 문자열에서 a번째 문자로 저장한다.
- alp를 출력한다.
2단계 단어 길이 재기
- 첫째 줄에 영어 소문자와 대문자로만 이루어진 단어가 주어진다. 단어의 길이는 최대 100이다.
- 첫째 줄에 입력으로 주어진 단어의 길이를 출력한다.
import java.util.Scanner;
public class Step_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
System.out.println(str.length());
}
}
A.
- 입력 받은 문자열을 String str에 초기화한다.
- str.length()를 통하여 문자열의 길이를 출력한다.
3단계 문자열
- 입력의 첫 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 한 줄에 하나의 문자열이 주어진다. 문자열은 알파벳 A~Z 대문자로 이루어지며 알파벳 사이에 공백은 없으며 문자열의 길이는 1000보다 작다.
- 각 테스트 케이스에 대해서 주어진 문자열의 첫 글자와 마지막 글자를 연속하여 출력한다.
import java.util.Scanner;
public class Step_3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int test = scan.nextInt();
String[] strArr = new String[test];
for (int i = 0; i < test; i++) {
strArr[i] = scan.next();
}
for (int i = 0; i < test; i++) {
String str = strArr[i];
System.out.print(str.substring(0,1));
System.out.println(str.substring(str.length()-1,str.length()));
}
}
}
A.
- int test를 선언하고 입력 받은 테스트 케이스 개수를 대입한다.
- String[]을 선언하고 기본 배열로 초기화한다.
- for문을 통해 strArr에 입력 받은 문자를 차례대로 대입한다.
- for문을 만들고 String str을 선언하고 strArr[i]의 값을 받아온다.
- 첫 글자는 str.substring(0,1)로, 마지막 글자는 str.substring(str.length()-1,str.length())으로 출력한다.
4단계 아스키 코드
- 알파벳 소문자, 대문자, 숫자 0-9 중 하나가 첫째 줄에 주어진다.
- 입력으로 주어진 글자의 아스키 코드 값을 출력한다.
import java.util.Scanner;
public class Step_4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
char char1 = str.charAt(0);
int a = (int)char1;
System.out.println(a);
}
}
A.
- 받은 문자를 String str에 대입한다.
- char char1을 선언하고 str.charAt()를 이용해 str의 특정 번호의 char를 대입한다.
- char1을 int에 저장해 아스키 코드의 값으로 변환하여 출력한다.
5단계 숫자의 합
- 첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
- 입력으로 주어진 숫자 N개의 합을 출력한다.
import java.util.Scanner;
public class Step_5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a= scan.nextInt();
String str = scan.next();
int sum=0;
for (int i=0; i<a; i++) {
int b = Integer.parseInt(str.substring(i,i+1));
sum += b;
}
System.out.println(sum);
}
}
A.
- 숫자 개수를 int에, 더할 숫자를 String을 선언하고 입력 받은 값을 대입한다.
- 합을 받을 int sum을 선언하고 0으로 초기화한다.
- 반복문을 사용하고 내부에 int b를 선언하고 Integer.parseInt(str.substring(i,i+1))를 사용해 str의 i+1번째 글자를 int 형태로 저장한다.
- sum에 b 값을 누적해 더한다.
- sum의 값을 출력한다.
6단계 알파벳 찾기
- 첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
- 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
- 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
import java.util.Scanner;
public class Step_6 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
int[] intArr1 = new int[26];
int[] intArr2 = new int[str.length()];
for (int i = 0; i < 26; i++) {//intArr1에 -1 모두 부여함.
intArr1[i] = -1;
}
for (int i = 0; i < str.length(); i++) {//intArr2에 문자에 해당하는 아스키 코드 값 저장
char alp = str.charAt(i);
intArr2[i] = alp;
}
for (int i = 0; i < 26; i++) {//a부터 반복문 작성
for (int j = 0; j < str.length(); j++) {//알파벳 하나를 정하고 intArr2의 값이 알파벳과 같아지면 intArr1에 j값을 부여함.
if (intArr2[j] == i + 97) {//intArr2의 j번째 알파벳이 i+97과 같은 경우
intArr1[i] = j;//intArr1[i] i번째 알파벳이 처음으로 등장한 지점 이 j번째라고 입력하기
break;
}
}
}
for (int i = 0; i < 26; i++) {
System.out.print(intArr1[i] + " ");
}
}
}
A.
- 문자열을 str에 받아준다.
- 정답으로 출력할 int배열과 알파벳을 int로 비교할 int배열을 선언하고 길이를 26, 문자열의 길이로 초기화한다.
- 배열 1에 기본 값인 -1을 부여한다.
- 문자열의 각 문자에 해당하는 아스키 코드 값을 배열 2에 부여한다.
- str.charAt를 이용한다.
- 반복문을 열어 알파벳 별로 점검할 반복문을 만든다.
- 반복문 내부에 배열 2와 비교하는 반복문을 만든다. 앞에서부터 비교하여 해당하는 알파벳이 있는 경우 배열 1의 i번째(알파벳 위치)에 j(문자열에서 알파벳이 처음 등장한 위치)를 부여한다.
- 일치하는 알파벳이 나온 후 뒤를 체크하지 않도록 break;로 j의 반복문을 탈출한다.
- 정답으로 제출할 intArr1을 출력한다.
7단계 문자열 반복
- 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다.
- 각 테스트 케이스에 대해 P를 출력한다.
import java.util.Scanner;
public class Step_7 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int test = scan.nextInt();
int[] intArr = new int[test];
String[] strArr = new String[test];
for (int i=0; i<test; i++) {
intArr[i] = scan.nextInt();
strArr[i] = scan.next();
}
for (int i=0; i<test; i++) {
for (int j=0; j<strArr[i].length(); j++) {
for (int k=0; k<intArr[i]; k++) {
System.out.print(strArr[i].substring(j,j+1));
}
}
System.out.println("");
}
}
}
A.
- 입력 값을 동시에 받아도 괜찮기 위해서는 출력 문장이 생기기 전에 스캔이 완료되어야 함.
- 따라서 입력 받은 값을 저장해 둘 배열이 필요하다.
- int test와 반복 횟수를 받을 int배열, 반복해 쓸 문장을 받을 String배열을 선언하고 기본값으로 초기화한다.
- for문을 통해서 입력 받은 반복 횟수와 반복할 문장을 배열에 대입한다.
- test케이스를 받은 수 만큼의 반복문 내부에 문자열의 길이와 같은 반복문을 작성한다.
- 그 내부에 새로운 반복문을 만들어 입력 받은 반복 횟수 만큼의 반복을 실시하는 반복문을 만들고 문자열을 앞부터 반복해서 출력한다.
8단계 단어의 개수
- 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
- 첫째 줄에 단어의 개수를 출력한다.
import java.util.Scanner;
public class Step_8 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
String[] strArr = str.split(" ");
int length=0;
for (int i=0; i<strArr.length; i++) {
if (strArr[i] != "") {
length++;
}
}
System.out.println(length);
}
}
A.
- 입력 받은 문자열을 줄 단위로 받는 NextLine으로 받아준다.
- strArr 배열을 선언하고 str을 “ ”을 기준으로 분리하여 대입한다.
- strArr의 0~마지막 까지 반복문을 통해 “”값을 제외한 내용물이 있는 배열의 수를 세고 출력한다.
9단계 상수
- 첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
- 3자리 숫자를 거꾸로 읽어 더 큰 숫자를 출력한다.
import java.util.Scanner;
public class Step_9 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str1 = scan.next();
String str2 = scan.next();
String[] strArr1 = str1.split("");
String[] strArr2 = str2.split("");
String a = "", b="";
a=strArr1[0];
b=strArr1[2];
strArr1[2]=a;
strArr1[0]=b;
a=strArr2[0];
b=strArr2[2];
strArr2[2]=a;
strArr2[0]=b;
str1 = strArr1[0]+strArr1[1]+strArr1[2];
str2 = strArr2[0]+strArr2[1]+strArr2[2];
int int1 = Integer.parseInt(str1);
int int2 = Integer.parseInt(str2);
if (int1>int2) {
System.out.println(int1);
} else {
System.out.println(int2);
}
}
}
A.
- next단위로 숫자 둘을 받아온다.
- 숫자를 1글자 단위로 분리하여 배열에 대입한다.
- 각 숫자의 1자리와 3자리를 교체하여준다.
- 배열을 다시 하나의 문자열로 통합한다.
- 문자열을 int로 변환한다.
- 두 수의 대수를 비교하여 큰 쪽을 출력하는 조건문을 만든다.
10단계 다이얼
- 전화를 걸고 싶은 번호가 있다면, 숫자를 하나를 누른 다음에 금속 핀이 있는 곳 까지 시계방향으로 돌려야 한다. 숫자를 하나 누르면 다이얼이 처음 위치로 돌아가고, 다음 숫자를 누르려면 다이얼을 처음 위치에서 다시 돌려야 한다.
- 숫자 1을 걸려면 총 2초가 필요하다. 1보다 큰 수를 거는데 걸리는 시간은 이보다 더 걸리며, 한 칸 옆에 있는 숫자를 걸기 위해선 1초씩 더 걸린다.
- 상근이의 할머니는 전화 번호를 각 숫자에 해당하는 문자로 외운다. 즉, 어떤 단어를 걸 때, 각 알파벳에 해당하는 숫자를 걸면 된다. 예를 들어, UNUCIC는 868242와 같다.
- 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다.
- 첫째 줄에 다이얼을 걸기 위해서 필요한 최소 시간을 출력한다.
import java.util.Scanner;
public class Step_10 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.next();
int[][] intArr = new int[2][];
intArr[0] = new int[str.length()];
int[] intArr1 = {3,3,3,3,3,4,3,4};
intArr[1] = intArr1;
for (int i=0; i<str.length(); i++) {
char char1 = str.charAt(i);
intArr[0][i] = char1;
}
for (int i=0; i<str.length();i++) {
int a = 65;
for (int j=0; j<8; j++) {
for (int k=0; k<intArr[1][j]; k++) {
if (intArr[0][i]==a) {
intArr[0][i]=j+3;
break;
} else {
a++;
}
}
}
}
int time = 0;
for (int i=0; i<str.length(); i++) {
time += intArr[0][i];
}
System.out.println(time);
}
}
A.
- 받아온 문자열을 str에 대입한다.
- 2차원 배열을 선언하고 0번에는 문자열 길이와 같은 배열로 초기화한다.
- 1번에는 알파벳의 개수를 배열에 넣어 대입한다.
- 반복문을 만들고 각 알파벳에 해당하는 유니코드 값을 0번 배열에 대입한다.
- 반복문을 만들고 int a를 선언해 A에 해당하는 유니코드 65로 초기화 한다.
- 2차원 반복문을 만들고 바깥의 반복문은 숫자 종류인 8번, 안쪽의 반복문은 1번 배열의 j번째 배열의 값 만큼 반복하는 반복문을 작성한다.
- 안쪽 반복문에 int a와 배열 0,i의 값이 동일한지 확인하고, 동일하지 않으면 a에 +1을 하여 다음 알파벳과 비교하는 반복문을 만든다.
- int a와 값이 동일하다면 배열 0,i에 j+3(해당하는 알파벳을 누르면 걸리는 시간)을 대입하고 break를 통해 반복을 완료한다.
- 반복문을 통해 0번째 배열의 값의 합을 구하여 출력한다.
11단계 다이얼
- 입력이 주어진다. 입력은 최대 100줄로 이루어져 있고, 알파벳 소문자, 대문자, 공백, 숫자로만 이루어져 있다. 각 줄은 100글자를 넘지 않으며, 빈 줄은 주어지지 않는다. 또, 각 줄은 공백으로 시작하지 않고, 공백으로 끝나지 않는다.
- 입력받은 그대로 출력한다.
import java.util.Scanner;
public class Step_11 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
System.out.println(scan.nextLine());
}
}
}
A.
- while 문으로 다음 줄이 있을 때만 반복하도록 하고, 각 줄을 출력하는 반복문을 만든다.