본문 바로가기
백준

[백준 5622] 자바 다이얼

by 소금_msg 2022. 8. 14.

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

 

switch문과 if문의 성능 비교 (ISA 관점에서)

"switch문과 if문의 차이는 무엇일까? 성능의 차이가 있을까?" switch문과 if문의 성능에 대해서 이야기를 하는 시간을 가져보고자 합니다. 프로그래밍을 배우다 보면 선택문을 사용해야 할 때 if문을

thinkpro.tistory.com

여기서 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