11654 - 아스키 코드
방법 1 ) charAt(0)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int ch = in.next().charAt(0);
System.out.print(ch);
}
}
방법 2) System.in + throws Exception
public class Main {
public static void main(String[] args) throws Exception {
int a = System.in.read();
System.out.print(a);
}
}
이게 byte 값으로 문자 한 개만 읽기 때문에 속도가 훨씬 빠르다.
11720 - 숫자의 합
방법 1) 기본적인 방법 charAt
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
String a = in.next();
in.close();
int sum = 0;
for(int i = 0; i < N; i++) {
sum += a.charAt(i)-'0';
}
System.out.print(sum);
}
}
방법 2) getBytes()
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine(); // N 은 쓸모가 없으므로 입력만 받는다.
int sum = 0;
for(byte value : br.readLine().getBytes()) {
sum += (value - '0'); // 또는 (a-48)
}
System.out.print(sum);
}
}
문자열을 byte로 반환해준다. 문자 하나씩 가져올 수 있다.
10809 - 알파벳 찾기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[26];
for(int i = 0; i < arr.length; i++) {
arr[i] = -1;
}
String S = br.readLine();
for(int i = 0; i < S.length(); i++) {
char ch = S.charAt(i);
if(arr[ch - 'a'] == -1) { // arr 원소 값이 -1 인 경우에만 초기화
arr[ch - 'a'] = i;
}
}
for(int val : arr) { // 배열 출력
System.out.print(val + " ");
}
}
}
Scanner로 할 경우 nextLine() 사용. ( 속도가 더 느림)
2675 - 문자열 반복
방법 1 )
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String[] str = br.readLine().split(" "); // 공백 분리
int R = Integer.parseInt(str[0]); // String -> int
String S = str[1];
for (int j = 0; j < S.length(); j++) {
for (int k = 0; k < R; k++) {
System.out.print(S.charAt(j));
}
}
System.out.println();
}
}
}
방법 2) StringBuilder 사용.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String[] str = br.readLine().split(" ");
int R = Integer.parseInt(str[0]);
for (byte val : str[1].getBytes()) {
for (int j = 0; j < R; j++) {
sb.append((char)val);
}
}
sb.append('\n');
}
System.out.print(sb);
}
}
1157 - 단어 공부
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int[] arr = new int[26];
for (int i = 0; i < arr.length; i++) {
arr[i] = 0;
}
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch - 'a' < 0) {
arr[ch - 'a' + 32] += 1;
} else {
arr[ch - 'a'] += 1;
}
}
int max = -1;
char ch = '?';
for (int i = 0; i < 26; i++) {
if (arr[i] > max) {
max = arr[i];
ch = (char) (i + 65); // 대문자로 출력해야하므로 65를 더해준다.
} else if (arr[i] == max) {
ch = '?';
}
}
System.out.println(ch);
}
}
1152 - 단어의 개수
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
System.out.println(st.countTokens());
}
}
StringTokenizer를 사용하면 공백을 기준으로 token의 개수만 꺼내올 수 있다.
countTokens()를 활용하면 쉽게 풀 수 있음.
2908 - 상수
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int A = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
int B = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
System.out.print(A > B ? A : B);
}
}
StringBuilder의 reverse()를 사용하면 문자열을 뒤집을 수 있다.
5622 - 다이얼
방법 1) HashMap 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
public class Main {
public static void main(String[] args) throws IOException {
HashMap<Character, Integer> map = new HashMap<Character, Integer>();// 초기값 지정
map.put('A', 2);
map.put('B', 2);
map.put('C', 2);
map.put('D', 3);
map.put('E', 3);
map.put('F', 3);
map.put('G', 4);
map.put('H', 4);
map.put('I', 4);
map.put('J', 5);
map.put('K', 5);
map.put('L', 5);
map.put('M', 6);
map.put('N', 6);
map.put('O', 6);
map.put('P', 7);
map.put('Q', 7);
map.put('R', 7);
map.put('S', 7);
map.put('T', 8);
map.put('U', 8);
map.put('V', 8);
map.put('W', 9);
map.put('X', 9);
map.put('Y', 9);
map.put('Z', 9);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int count = 0;
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
count += map.get(ch) + 1;
}
System.out.println(count);
}
}
2941 - 크로아티아 알파벳
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
String[] croatia = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" };
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
for (int i = 0; i < croatia.length; i++) {
if (s.contains(croatia[i])) {
s = s.replaceAll(croatia[i], "*");
}
}
System.out.println(s.length());
}
}
문자열에서 contains를 하면 포함 여부를 알 수 있고 replaceAll을 하면 해당 문자열을 원자는 문자열로 교체할 수 있다.
1316 - 그룹 단어 체커
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));
int N = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
int Nocount = 0;
for (int i = 0; i < N; i++) {
String s = br.readLine();
sb.delete(0, sb.length()); // StringBuilder 초기화
for (int j = 0; j < s.length(); j++) {
if (sb.toString().contains(String.valueOf(s.charAt(j)))) {
Nocount++;
break;
}
if (j != s.length() - 1 && s.charAt(j) != s.charAt(j + 1)) {
sb.append(s.charAt(j));
}
}
}
System.out.println(N - Nocount);
}
}
StringBuilder 초기화는 sb.delete(0,sb.length())로 하면 된다.
알고리즘은 다음에 연속되지 않은 단어가 나오면 sb에 그 단어를 추가하고 만약에 지금 검사하려는 단어가 sb에 있는 단어이면 그룹 단어가 아니라는 count를 증가시키고 break 한다.
(sb에 있는 단어라는 뜻은 이미 한번 나왔다는 뜻)
'Algorithm(알고리즘) > Java' 카테고리의 다른 글
[Jungol][Java][Greedy,활동 선택 ] 1828 - 냉장고 (0) | 2021.02.18 |
---|---|
[Jungol][Java][stack] 1141 - 불쾌한 날 (0) | 2021.02.05 |
Java 백준 단계별 풀기 (기초 문법 정리) 함수 (0) | 2020.12.24 |
Java 백준 단계별 풀기 (기초 문법 정리) 배열 (0) | 2020.12.24 |
Java 백준 단계별 풀기 (기초 문법 정리) for문, while문 (0) | 2020.12.23 |