코딩테스트/SWEA

[SWEA] (D1) 2050. 알파벳을 숫자로 변환

l0o0lv(한동근) 2024. 10. 13. 21:36

알파벳으로 이루어진 문자열을 입력 받아 각 알파벳을 1부터 26까지의 숫자로 변환하여 출력하라.

[제약 사항]
문자열의 최대 길이는 200이다.

[입력]
알파벳으로 이루어진 문자열이 주어진다.

[출력]
각 알파벳을 숫자로 변환한 결과값을 빈 칸을 두고 출력한다.

 

[풀이]

아스키코드를 활용하려했는데, 도무지 생각이 나지 않았다.

 

그래서 char배열을 만든 후 하나하나 비교해가면서 출력을 했다.

 

정답처리 됐지만 비효율적이라고 느꼈고, 풀이를 찾아봤다.

import java.util.*;
import java.lang.*;
import java.io.*;
 
class Solution {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        String str = br.readLine();
        char[] charNum = {'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'};
         
        for(int i=0; i<str.length() ; i++){
        for(int j=0; j<charNum.length ; j++){
            if(str.charAt(i) == charNum[j])
                System.out.print((j+1) + " ");
        }
        }
    }
}

 

[다른 사람의 풀이]

arr[i] 가 A라고 예를 들자.

 

A의 아스키코드 값은 65이다.

 

여기서 'A' 를 빼주면 0이 되고, 1을 더하면 숫자 1이 나오게 된다.

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        String word; 
        Scanner sc = new Scanner(System.in);
        word = sc.next(); //문자열 입력
        char[] arr = word.toCharArray(); //문자열의 배열을 한 글짜씩 잘라 배열에 삽입
        for(int i = 0; i<arr.length; i++){ //배열 길이만큼 반복
            System.out.printf(arr[i]-'A'+1+" "); //아스키코드 A = 65를 이용
        }					 //입력받은 문자 - 65 + 1을 사용하여 값 추출	
    }
}

 

문제 출처 : https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&contestProbId=AV5QLGxKAzQDFAUq&categoryId=AV5QLGxKAzQDFAUq&categoryType=CODE&problemTitle=&orderBy=PASS_RATE&selectCodeLang=ALL&select-1=1&pageSize=30&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com