BaekJoon Oline Judge - Step 7
11654. 아스키코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String c = scan.next();
scan.close();
int res = c.charAt(0);
System.out.println(res);
}
}
10809. 알파벳 찾기
배열을 -1로 모두 초기화해주고, 알파벳 소문자의 개수만큼 배열 생성
a부터 시작하므로, a의 아스키 값인 97을 뺀 곳에 문자가 처음 등장하는 index를 넣는다.
두번 등장할 때 배열을 덮어쓰면 안되기 때문에 -1일 때만 값 넣어주기!
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String S = scan.next();
scan.close();
int [] arr = new int[26];
Arrays.fill(arr, -1);
for(int i=0; i<S.length(); i++) {
int ascii = S.charAt(i);
if(arr[ascii-97] == -1) {
arr[ascii-97] = i;
}
}
for(int val : arr){
System.out.print(val+" ");
}
}
}
2675. 문자열 반복
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
for(int i=0; i<N; i++) {
int R = scan.nextInt();
String S = scan.next();
String str = "";
for(int m=0; m<S.length(); m++) {
for(int n=0; n<R; n++) {
str = str + S.charAt(m);
}
}
System.out.println(str);
}
scan.close();
}
}
1316. 그룹 단어 체커
알파벳 소문자 26개를 배열로 선언하고 false로 모두 초기화한다. (i가 증가할 때마다 배열 초기화 해줘야함!)
문자를 입력받고 그 문자의 길이-1 만큼 반복문을 돌린다.
before(i), after(i+1)의 문자가 같다면 같은 배열의 index이므로 둘 중 하나인 after만 true로 바꾸어준다.
만약 두개가 다르다면 체크해주어야 할 것이 있는데, 이미 그 앞에 알파벳이 존재해서 true로 바뀌었는지다.
이미 있던 알파벳이면(true이면) false로 바꿔주고, flag를 증가시킨다.
같은 알파벳이 떨어져서 존재하면 그룹 단어가 아니므로, flag가 0이 아니라면 그룹단어의 갯수를 증가시키지 않는다.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int N = scan.nextInt();
boolean [] checker = new boolean[26];
int groupCnt = 0;
for(int i=0; i<N; i++) {
String word = scan.next();
int flag = 0;
Arrays.fill(checker, false);
for(int j=0; j<word.length()-1; j++) {
int beforeAscii = word.charAt(j);
int afterAscii = word.charAt(j+1);
if(beforeAscii == afterAscii) { //같은 경우
checker[afterAscii-97] = true; //둘 중 하나 after만 담는다.
} else { //다른 경우
//after가 이미 true(앞에 있던 수)인지 체크하고 이미 있던 알파벳이면 false로 바꾼다.
if(checker[afterAscii-97] == true) {
checker[afterAscii-97] = false;
flag += 1;
} else {
checker[beforeAscii-97] = true;
checker[afterAscii-97] = true;
}
}
}
if(flag == 0) {
groupCnt++;
}
}
scan.close();
System.out.println(groupCnt);
}
}
1157. 단어 공부
알파벳 갯수만큼 배열을 만든다. 대소문자를 구분하지 않기 때문에 배열의 크기는 26이다.
a = 97, A = 65
97과 65가 들어왔을 때는 같게 취급해야 한다. 그렇기 때문에 대소문자간의 차인 32를 더해주었음.
그 다음은 알파벳 찾기 문제와 동일하다.
알파벳 위치의 index를 증가시키고 가장 큰 값을 가지고 있는 index에 65를 더해 대문자 문자로 출력하면 됨!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String word = scan.next();
scan.close();
int [] arr = new int[26];
for(int i=0; i<word.length(); i++) {
int ascii = word.charAt(i);
if(ascii < 97) {
ascii = ascii + 32;
}
arr[ascii-97]++;
}
int max = 0, maxIndex = 0;
for(int i=0; i<arr.length; i++) {
if(arr[i] > max) {
max = arr[i];
maxIndex = i;
} else if(arr[i] == max) {
maxIndex = -2;
}
}
int res = maxIndex + 65;
System.out.print((char)res);
}
}
2908. 상수
문자열로 받아서 반전시켜주고, 정수형으로 더 큰 수 출력해주기.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String A = scan.next();
String B = scan.next();
scan.close();
String newA="", newB="";
for(int i=2; i>=0; i--) {
newA = newA + A.charAt(i);
newB = newB + B.charAt(i);
}
int max = Math.max(Integer.parseInt(newA), Integer.parseInt(newB));
System.out.print(max);
}
}
5622. 다이얼
numbers는 아스키코드 배열
time은 아스키코드 배열에 해당하는 초수를 담아논 배열
문자열 길이만큼 반복문을 돌리면서 index에 맞는 문자를 아스키코드로 변환한다.
그리고 numbers 배열과 비교해 아스키 코드가 위치하는 index를 발견하면 이 index로 time 배열에서 초수를 찾아 sum에 더하고 break 해주면 됨.
if else 사용하기 싫어서 다르게 풀어보았다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String dial = scan.next();
scan.close();
int[] numbers = {67, 70, 73, 76, 79, 83, 86, 90};
int[] time= {3, 4, 5, 6, 7, 8, 9, 10};
int sum = 0;
for(int i=0; i<dial.length(); i++) {
for(int j=0; j<numbers.length; j++) {
int ascii = dial.charAt(i);
if(numbers[j] >= ascii) {
sum = sum + time[j];
break;
}
}
}
System.out.println(sum);
}
}
2941. 크로아티아 알파벳
배열을 크로아티아 알파벳으로 초기화 해두고, 반복문을 돌리면서 입력받은 문자열에 크로아티아 문자열이 있다면 한자리 문자로 replace해준다.
그리고 그 문자열의 길이를 출력! replace를 사용하면 쉽게 풀리는 문제
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String array[] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
Scanner scan = new Scanner(System.in);
String str = scan.next();
scan.close();
for(int i=0; i<array.length; i++) {
str = str.replace(array[i], "*");
}
System.out.println(str.length());
}
}
'CS > Baekjoon' 카테고리의 다른 글
[Algorithm] 백준 단계별로 풀어보기 - 단계 8. 규칙 찾기 (2) (0) | 2019.06.28 |
---|---|
[Algorithm] 백준 단계별로 풀어보기 - 단계 8. 규칙 찾기 (1) (0) | 2019.04.18 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 6 (0) | 2019.04.16 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 5 (0) | 2019.04.15 |
[Algorithm] 백준 단계별로 풀어보기 - 단계 4 (0) | 2019.04.07 |