본문 바로가기
Programming Language/JAVA

[JAVA] 백준 문제풀이 (15351번: 인생 점수)

by NeoGul.S 2022. 6. 4.

요 근래 1일1문제 풀이 한다고 해놓고 실천을 못하고 있다.

 

사유는 근본적으로는 너무 게을러서..

 

그래도 핑계를 대자면 확실한 진로를 못잡겠다. 

모바일 어플 개발(안드로이드 or IOS 개발)을 생각중이라 국비나 인터넷 강의를 찾는중...

 

 

일단 오늘의 문제는...

 

백준 15351(인생 점수) 되시겠다.

https://www.acmicpc.net/problem/15351

 

15351번: 인생 점수

어떤 사람이 무엇을 즐기느냐에 따라 그 사람의 인생 점수를 측정할 수 있다. A를 1점, B를 2점, ... , Z를 26점으로 해, 즐기는 것의 이름의 알파벳 점수를 모두 더하면 된다. 예를 들어, "OTAKU LIFE" 는

www.acmicpc.net

 

사실 소개하기도 좀 뭐한게 난이도가 상세한 서술을 요할만큼 그렇게 높은 수준은 아니다.

 

그래도 기록 보관용으로...

 

문제 내용은 다음과 같다.

 

어떤 사람이 무엇을 즐기느냐에 따라 그 사람의 인생 점수를 측정할 수 있다. A를 1점, B를 2점, ... , Z를 26점으로 해, 즐기는 것의 이름의 알파벳 점수를 모두 더하면 된다. 예를 들어, "OTAKU LIFE" 는 O = 15, T = 20, A = 1, K = 11, U = 21, L = 12, I = 9, F = 6, E = 5 로 모두 더하면 100점이 된다(띄어쓰기는 무시). 하지만 "GAMING LIFE"는 총 83점으로 부족한 삶이고, "PROGRAMMING"은 131점으로 너무 힘든 삶을 살고 있다. 여러분이 할 것은 여러 개의 즐기는 것 리스트를 입력받아, 그것이 각 몇 점짜리 인생인지를 계산하는 것이다.

 

입력은

 

첫번째 줄에 입력받을 문장의 개수를 입력하고

대문자로 입력할 문장을 작성한다.

 

출력은

해당 알파벳에 정해진 값을 모두 더하여 100점이면 PERPECT LIFE를 출력하게 하고, 그렇지 않다면 점수 합계를 출력

 

import java.util.Scanner;

public class test_algo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		
		int lineCount = sc.nextInt();
		String lineStr[] = new String[lineCount];
		int resultArr[] = new int[lineCount];
		
		sc.nextLine(); //스캐너 입력간 자동으로 line(줄바꿈이 발생해서 작성)
		
		for(int i=0;i<lineStr.length;i++) {
			lineStr[i] = sc.nextLine();
		}
			
		for(int i=0;i<lineCount;i++) {
			for(int j=0;j<lineStr[i].length();j++) {
				if(lineStr[i].charAt(j)!=' ')			
					resultArr[i]+=lineStr[i].charAt(j)-64;
			}
		}
		
		for(int i=0;i<lineStr.length;i++) {
			if(resultArr[i]==100)
				System.out.println("PERFECT LIFE");
			else
				System.out.println(resultArr[i]);
		}
		

	}

}

구조는 보다 싶이

 

1. 스트링 배열, 각 문자열의 계산 값을 저장할 int형 배열을 선언

 

2. 입력할 개수를 입력받고 문자열을 해당 개수 만큼 입력받는다.

 

3. 문제에서 제시한 조건이 A부터 1, Z까지 1씩 추가되는 조건이어서 아스키코드를 활용하는 방안이 떠올랐다.

사실 처음에는 A~Z까지 1~26으로 일대일 대응하는 식으로 할까 했는데 귀찮아서...

 

아스키 코드를 활용하여 해당 문자에 해당하는 값 -64 하여 반복문이 시행될 때마다 해당 문자열 순서의 resultArr 배열에 값을 계속 더하도록 하였다. (10진법 기준으로 계산)

 

이때 문자열.charAt() 을 활용하여 해당 문자열에서 X번째에 있는 문자를 추출하게 하였음.

 

아스키 코드는 다음을 참조한다.

https://ko.wikipedia.org/wiki/ASCII

 

ASCII - 위키백과, 우리 모두의 백과사전

1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문 알파벳을 사용하는 대표적인 문자

ko.wikipedia.org

 

그리고 마지막 반복문 코드는 문자열 별 계산된 값을 순서대로 값을 비교

 

100이면 PERFECT LIFE를 출력, 외에는 계산된 값을 출력하게 하였다.

 

*코드 중간에 sc.nextLine(); 을 볼 수 가 있는데, 이는 마지막 문자열을 받지않고 넘어가는 일이 생겨서...

(개행 문자로 인해 생기는 문제인데 입력받기 전 중간에 nextLine();을 한번 더 해주면된다.)

 

 

처음에 문자열을 next()로만 써서 받아야지 했다가 왜 공백있는 문자열을 잘려서 받지 계속 고민하다가 아차 했다 ㅋㅋㅋ

역시 코딩은 꾸준히 해야.....

자주 쓰는 것도 안하면 잊는다.