Post

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.