25083 새싹
이스케이프 문자사용하기.
제어 문자는 \n이랑 \t 정도 아니면 백준할 때는 사용한 기억이 거의 없다.
그래도 실제 프로젝트를 진행하다보면 꽤 사용하는 듯 하다.
이런 그림 문제 없었으면 좋겠다... 계속 틀려서 정답보고 했음
3003 킹, 퀸, 룩, 비숍, 나이, 폰
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int str1[] = {1, 1, 2, 2, 2, 8};
int str2[] = new int[6];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i=0;i<6;i++){
str2[i]=Integer.parseInt(st.nextToken());
}
for (int i=0;i<6;i++){
System.out.print(str1[i]-str2[i] + " ");
}
br.close();
}
}
int형 배열 2개를 선언 및 초기화 한 후 비교와 동시에 출력했다.
배열 선언 및 초기화를 동시에 할 때는 위 방식 말고 int str1[] = new int[6] {1, 1, 2, 2, 2, 8}; 도 가능하다.
2444 별 찍기 - 7
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
for (int i=0;i<a;i++){
for(int j=a-i-1;j>0;j--){
System.out.print(" ");
}
for(int k=i*2+1;k>0;k--){
System.out.print("*");
}
System.out.println();
}
for (int i=a-2;i>=0;i--){
for(int j=a-i-1;j>0;j--){
System.out.print(" ");
}
for(int k=i*2+1;k>0;k--){
System.out.print("*");
}
System.out.println();
}
br.close();
}
}
10988 팰린드롬인지 확인하기
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int n=0;
String str2 = new StringBuilder(str).reverse().toString();
for(int i=0;i<str.length();i++){
if(str.charAt(i)!=str2.charAt(i)){
n++;
}
}
if (n==0)
System.out.println(1);
else
System.out.println(0);
br.close();
}
}
StringBuilder의 reverse() 메서드 이용
1157 단어 공부
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char str[] = br.readLine().toUpperCase().toCharArray();
char alp[] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int[] cnt = new int[alp.length];
for(char ch : str){
int idx = ch - 'A';
cnt[idx]++;
}
int max = 0;
int idx = 0;
for(int i=0; i<cnt.length; i++){
if(max < cnt[i]){
max = cnt[i];
idx = i;
}
}
int maxCnt = 0;
for (int n : cnt){
if(max == n) {
maxCnt++;
}
}
if(maxCnt != 1){
System.out.println("?");
} else {
System.out.println(alp[idx]);
}
br.close();
}
}
먼저 입력받으면서 toUpperCase()를 이용해 대문자로 바꿔주었다.
또한 for-each 구문을 위해 String이 아닌 CharArray로 저장하였다.
알파벳 배열의 경우에도 문자열을 작성하고 toCharArray() 메서드를 사용하면 되는데 깜빡하고 헛수고했다...
이제 문자를 하나씩 비교하며 각 문자에 맞는 인덱스 자리에 넣는다.
알파벳을 -'A' 해주면 0~25까지의 알맞는 자리로 들어간다.
비교가 끝나면 이제 가장 많은 알파벳 개수와 중복여부를 반복문으로 판단한다.
2941 크로아티아 알파벳
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
String c[] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
for (int i=0;i<c.length;i++){
if (str.contains(c[i])){
str = str.replace(c[i], "/");
}
}
System.out.println(str.length());
br.close();
}
}
옛날에 파이썬으로 푼 기억으로 했다..
JAVA에서 문자열 포함 여부는 contains() 메서드를 이용하고, 문자열 대체는 replace() 함수를 이용한다.
1316 그룹 단어 체커
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.parseInt(br.readLine());
int b = a;
for (int i = 0; i < a; i++) {
String str = br.readLine();
String c = "abcdefghijklmnopqrstuvwxyz";
for (int j=0;j<str.length();j++){
if (c.contains(Character.toString(str.charAt(j)))) {
c = c.replace(str.charAt(j), ' ');
}
else {
if (str.charAt(j) != str.charAt(j - 1)) {
b--;
break;
}
}
//c = c.replace(str.charAt(j), ' ');
}
}
System.out.println(b);
br.close();
}
}
알고리즘 :
반복 시작마자 문자열과 alphabet 문자열을 새로 선언한다.
만약 새로운 문자라면 alphabet 문자열에서 없애주는 것으로 문자가 왔음을 체크한다.
만약 새로운 문자가 아니라면, 이전 문자와 비교하여 다른지 체크한다. 이 때 다르다면 그룹단어 수 -1을 한 후 break
알고리즘 자체가 어렵다기보다는 java에서 문자와 문자열을 다루는게 어려웠다.
분명 contains() 메서드가 문자도 된다고 했던 것 같은데...문자열만 가능한 듯하다. 문자 넣으니까 오류남.
그래서 toString() 메서드를 이용하여 문자를 다시 문자열로 바꾸고 비교하는 작업을 한번 추가해주었다.
25206 너의 평점은
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Map<String, Double> dict = new HashMap<>(){{
put("A+", 4.5);
put("A0", 4.0);
put("B+", 3.5);
put("B0", 3.0);
put("C+", 2.5);
put("C0", 2.0);
put("D+", 1.5);
put("D0", 1.0);
put("F", 0.0);
}};
Double cnt=0.0; //학점
Double num=0.0; //학점*과목평점
for (int i=0;i<20;i++){
String[] str = br.readLine().split(" ");
if (!str[2].equals("P")){
cnt+=Double.parseDouble(str[1]);
num+=dict.get(str[2])*Double.parseDouble(str[1]);
}
}
System.out.println(num/cnt);
br.close();
}
}
dictionary를 사용했다.
JAVA의 dictionary는 HashMap이다. 위와 같이 한번에 여러 데이터를 put하고 싶다면 이중 괄호를 사용한다.
Java.util을 import해야 사용 가능하고, Map<키의type, 값의 type> dict = new HashMap<>(); 로 선언 및 할당이 가능하다.
파이썬과 마찬가지로 put, get, size, remove 등의 연산자를 사용할 수 있다.
문자열 비교는 equals() 메서드 사용하기..!
아무 생각없이 '=='를 사용했다가 계속 오류가 나서 헤맸다..
# 회고
코딩하다보면 error: incompatible types: int cannot be converted to String 이런 오류를 많이 보게된다.
String형 변수에 int형 값을 넣을 수 없다는 뜻!
심화 문제는 혼자서 해보려고 많이 노력했다.
근데 컴파일러 사이트가 넘 느리고 불편해서 화ㄴ😡🤬🤬🤬
'코딩테스트' 카테고리의 다른 글
[JAVA] 일반 수학 1단계 (0) | 2024.01.19 |
---|---|
[JAVA] 2차원 배열 (0) | 2024.01.18 |
[JAVA] 문자열 (0) | 2024.01.16 |
[JAVA] 1차원 배열 (0) | 2024.01.14 |
[JAVA] 반복문 (1) | 2024.01.13 |