baekjoon 5단계 문자열
기록용 baekjoon 단계별 풀이입니다. 언어 : Java
27866번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String S = bf.readLine();
int i = Integer.parseInt(bf.readLine());
System.out.println(S.charAt(i-1)); //charAt() : 문자열의 n번째 문자 출력
}
}
- 💡 charAt() : 문자열의 n번째 문자 출력
1
2
String str = "abcd"일 때
str.charAt(2) 의 값은 c
2743번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
System.out.println(s.length());
}
}
9086번
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(bf.readLine());
String[] a = new String[num];
for(int i=0; i<num; i++)
{
String str = bf.readLine();
a[i] =str.substring(0,1)+str.substring(str.length()-1,str.length());
//substring : 시작 인덱스 값부터 (끝-1)번째 값까지 가져옴
}
for(int j=0;j<num;j++)
{
System.out.println(a[j]);
}
}
}
- 💡 String substring(int index)
- String의 index값부터 끝까지 가져옴
1 2 3 4
String str = "abcdef" str.substring(3) : def str.substring(0,1) : a str.substring(str.length()-1,str.length()) : f
11654번
1
2
3
4
5
6
7
8
9
10
11
12
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
int a = System.in.read();
//System.in은 byte값으로 문자 한 개만 읽으면서 해당 문자에 대응되는 아스키코드 값을 저장
System.out.print(a);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
char c = s.charAt(0);
System.out.print((int)c);
}
}
💡 코드 설명
‘BufferedReader’를 사용하여 입력을 받기위한 준비를 함
- InputStreamReader(System.in) 은 표준 입력(키보드 입력)에서 바이트 스트림을 문자 스트림으로 변환함
String s = bf.readLine();
:- 사용자로부터 한 줄의 문자열을 입력 받아 변수 ‘s’에 저장
char c = s.charAt(0);
:- 입력받은 문자열의 첫 번째 문자를 추출하여 변수 ‘c’에 저장
System.out.print((int)c);
:- 변수 ‘c’에 저장된 문자를 ASCII 값으로 변환하여 출력
11720번 - 다시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(bf.readLine());
int sum = 0;
for(byte value : bf.readLine().getBytes())
{ // 입력받은 숫자를 문자열로 변환하고 그 문자열의 각 문자를 바이트로 변환 후 value에 저장
sum+=(value-'0'); //value에서 0 문자의 ASCII 값(48)을 빼서 해당 문자에 해당하는 숫자를 얻음
} //바이트로 변환했기에 0을 빼주는 것
System.out.print(sum);
}
}
10809번 - 다시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String st = bf.readLine();
int[] arr = new int[26];
for(int i=0;i<26;i++)
{
arr[i] = -1;
}
for(int j=0;j<st.length();j++)
{
char ch = st.charAt(j); //문자열을 순회하며 인덱스 j에 있는 문자를 추출하여 ch에 저장
if (arr[ch - 'a'] == -1) { //초기값인 경우 변경
arr[ch - 'a'] = j; //알파벳의 순서를 인덱스와 맞추기 위함
}
}
for(int var : arr)
{
System.out.print(var+" ");
}
}
}
2675번 - 다시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(bf.readLine());
String[] str;
for(int i=0;i<t;i++)
{
str = bf.readLine().split(" "); //공백을 사이에 두고
int num = Integer.parseInt(str[0]); //앞에는 숫자(반복 횟수 저장)
String s = str[1]; //뒤는 String 입력 받기(반복할 문자열 저장)
for(int j=0;j<s.length();j++) //입력 받은 문자열의 길이만큼 반복
{
for(int k=0;k<num;k++) //입력 받은 반복 횟수만큼 반복
{
System.out.print(s.charAt(j));
}
}
System.out.println();
}
}
}
1152번 - 다시
1
2
3
4
5
6
7
8
9
10
11
12
13
import javax.swing.*;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
System.out.println(st.countTokens());
}
}
2908번 - 다시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine()," ");
//사용자로부터 입력받은 한 줄의 문자열을 공백을 기준으로 나누어 객체 st에 저장
int A = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
//StringBuilder는 reverse() 메소드를 포함
//toString() : StringBuilder 타입을 문자열로 반환
int B = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
System.out.println(A>B ? A:B);
}
}
💡 st.nextToken()을 통해 첫번째 토큰(숫자)를 얻어내고 이를 StringBuilder를 사용하여 뒤집은 후 문자열로 반한 뒤 다시 정수형으로 변환하여 A에 저장
5622번 - 다시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
int cnt = 0;
int k = s.length();
for(int i=0;i<k;i++)
{
switch (s.charAt(i)){
case 'A': case 'B': case 'C':
cnt+=3;
break;
case 'D': case 'E': case 'F':
cnt+=4;
break;
case 'G': case 'H': case 'I':
cnt+=5;
break;
case 'J': case 'K': case 'L':
cnt+=6;
break;
case 'M': case 'N': case 'O':
cnt+=7;
break;
case 'P': case 'Q': case 'R': case 'S':
cnt+=8;
break;
case 'T': case 'U': case 'V':
cnt+=9;
break;
case 'X': case 'Y': case 'W': case 'Z':
cnt+=10;
break;
}
}
System.out.print(cnt);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
int[] map = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6,
7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9};// 배열에 알파벳에 대응되는 수 저장
int sum = 0, c;
while ((c = System.in.read()) != 10)
sum += map[c - 65] + 1;
//루프는 사용자가 엔터키(ASCII 코드 10)를 입력하기 전까지 계속
System.out.println(sum);
}
}
💡 c = System.in.read()) != 10 은 사용자가 엔터키(ASCII 코드 10)을 입력하기 전까지 계속함
- c는 현재 읽은 아스키 코드 값을 나타냄. 대문자 ‘A’의 아스키코드 값은 65이고 이후에 연속적으로 증가함. ‘B’ : 66, ‘C’ : 67
- map 배열은 각 알파벳에 대응하는 수를 저장하고 있음. 이때 배열 의 인덱스는 알파벳 아스키 코드 값에서 ‘A’의 아스키 코드 값인 65를 뺀 값. 즉 ‘A’는 map[0]에 대응, ‘B’는 map[1]에 대응
11718번 -다시
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
while((str=bf.readLine())!=null)
{
System.out.println(str);
}
}
}
💡 bf.readLine()을 통해 한 줄씩 입력 받음. 입력이 더 이상 없을 때 까(EOF, End Of File)지 반복
!= null
: 입력이 더 이상 없을 때까지 반복아무것도 입력 안 했을 때를 제외하고 계속 입력 받기
This post is licensed under CC BY 4.0 by the author.