import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] arg){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); // 입력받는 문자
int cnt = 0;
int sum = 0;
for (int i=0;i<str.length();i++){
String chStr = String.valueOf(str.charAt(i));
switch (chStr){
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 "W": case "X": case "Y": case "Z":
cnt =10;
break;
default:
cnt =0;
break;
}
sum += cnt;
}
System.out.println(sum);
}
}
스위치문에서 여러개 조건을 넣는 법을 처음 알았다.
if문으로 해결할 수도 있지만 가독성을 위해 switch문을 사용.
charAt으로 문자열을 한글자씩 자른다음, char 타입을 String 타입으로 형변환 시켜주었다.
char 타입으로 switch인자로 넣었더니 타입에러가 나서 맞춰주었다.
근데 if문으로 풀면 어떨까 궁금해졌다
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] arg){
Scanner sc = new Scanner(System.in);
String str = sc.nextLine(); // 입력받는 문자
int cnt = 0;
int sum = 0;
for (int i=0;i<str.length();i++){
String chStr = String.valueOf(str.charAt(i));
if(chStr.equals("A")||chStr.equals("B")||chStr.equals("C")){
cnt =3;
}else if(chStr.equals("D")||chStr.equals("E")||chStr.equals("F")){
cnt =4;
}else if(chStr.equals("G")||chStr.equals("H")||chStr.equals("I")){
cnt =5;
}else if(chStr.equals("J")||chStr.equals("K")||chStr.equals("L")){
cnt =6;
}else if(chStr.equals("M")||chStr.equals("N")||chStr.equals("O")){
cnt =7;
}else if(chStr.equals("P")||chStr.equals("Q")||chStr.equals("R")||chStr.equals("S")){
cnt =8;
}else if(chStr.equals("T")||chStr.equals("U")||chStr.equals("V")){
cnt =9;
}else if(chStr.equals("W")||chStr.equals("X")||chStr.equals("Y")||chStr.equals("Z")){
cnt =10;
}else{
cnt =0;
}
sum += cnt;
}
System.out.println(sum);
}
}
처음에는 저 if문 조건식을
if(chStr=="A"||chStr=="B"||chStr=="C"){}
이런식으로 써놨는데 안타는 거다....
구글링 ㄲㄲ
String 타입은 기본형이 아니라 주소를 비교하는 참조형 변수인데
== 연산자가 참조타입 변수를 비교할 때에는 참조하는 곳이 같은지 주소값을 비교하니까
당연히 chStr과 "A"를 같다고 체크할 수 없었던 것.
그래서 자바에서 문자열을 비교하려면 그 값을 비교하는 equals 메서드를 써야한다.
https://coding-factory.tistory.com/536
(이 블로그에 설명이 잘 되어있다.)
위에거가 if문으로 푼 것. 아래것이 switch문으로 푼 것.
시간은 if문이 더 걸리는데 메모리는 if문이 더 적게 먹는다.
https://thinkpro.tistory.com/132
여기서 if와 switch문은 서로 처리할때 방식이 달라서
비교조건 수가 적을때 > if문 사용이 유리
비교조건 수가 많을때 > switch문 사용이 유리
하다고 한다.
'백준' 카테고리의 다른 글
[백준 2941] 크로바티아 알파벳 (0) | 2022.08.16 |
---|---|
[백준 11720] 숫자의 합 (0) | 2022.08.10 |
[백준 25304] 영수증 자바 (0) | 2022.08.08 |
[백준 8958] OX퀴즈 자바 (0) | 2022.08.07 |
[백준 1546] 자바 평균 (0) | 2022.08.03 |