Ethan(기린)
그린기린그림 일기
Ethan(기린)
전체 방문자
오늘
어제
  • 전체보기 (43)
    • Language (4)
      • JavaScript (4)
    • Web (0)
      • HTML (0)
    • Problem Solving (29)
      • BOJ (18)
      • 프로그래머스 (10)
    • Computer Science (3)
      • Algorithm & Data Structure (2)
      • Network (1)
    • Error Log (4)
    • Config (1)
      • Test (1)
    • Thinking (2)
      • Retrospect (2)
      • Essay (0)
    • Book (0)

인기 글

최근 글

최근 댓글

태그

  • Java
  • OOP
  • 문자열
  • boj
  • Lv. 2
  • 객체 지향 프로그래밍
  • JavaScript
  • Problem Solving
  • 완전탐색
  • 알고리즘
  • Java의 정석 3rd Edition
  • 프로그래머스
  • Object-oriented programming
  • 백준
  • Lv. 1

티스토리

hELLO · Designed By 정상우.
Ethan(기린)

그린기린그림 일기

[백준 11720번/문자열] 숫자의 합 - Java
Problem Solving/BOJ

[백준 11720번/문자열] 숫자의 합 - Java

2021. 3. 16. 00:28

www.acmicpc.net/problem/11720

 

11720번: 숫자의 합

첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.

www.acmicpc.net


내 코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		
		String str = sc.nextLine(); // 개행 문자(엔터) 처리	
		str = sc.nextLine(); // 실제 두 번째 입력 값을 받음
		sc.close();
		
		char[] tmp = str.toCharArray();
		int sum = 0;
		
		for(int i = 0; i < n; i++) {
			sum += (tmp[i] - '0');
		}
		
		System.out.println(sum);
	}

}

첫 번째 입력인 숫자의 개수를 n으로 받는다. 그리고 두 번째 입력으로 각 자릿 수에 합을 구해야하는 숫자 값을 String으로 받은 후 char 배열에 문자로 받는다.

그렇게 받은 char 배열의 각 원소의 값들은 아스키코드 값을 가지고 있기 때문에 -48 또는 -'0' 을 해주어 숫자 값으로 디코딩하고 해당 숫자를 숫자의 개수만큼 for문을 반복하여 그 값을 sum에 더한 후 결과를 출력한다.


생각해야할 점

  1. Scanner로 받는 경우, nextInt() 메서드는 사용자 입력에 가장 마지막 개행 문자를 제거하지 않기 때문에 두 번째에 오는 값을 nextLine() 메서드로 받으면 이를 개행 문자(엔터)만 입력 받아 처리하고 종료된다는 점을 주의해야 한다.
  2. 위 문제에 대해서는 allg.tistory.com/17 이 블로그를 참조해서 해결했다.
 

[Scanner] 자바 nextInt( ) 사용 후 nextLine( ) 사용시 문제점 해결방법

[Java] nextInt( ) 사용 후 nextLine( ) 사용시 문제점 해결 방법 Scanner.nextInt 메소드는 사용자 입력의 가장 마지막 개행문자(엔터, newline)를 제거하지 않음 개행문자(엔터) 전까지만 숫자로 입력 받습니.

allg.tistory.com

 


개선된 코드

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		String str = sc.next();
		sc.close();
		
		int sum = 0;
		
		for(int i = 0; i < n; i++) {
			sum += str.charAt(i) - '0';
		}
		
		System.out.println(sum);
	}

}

String 입력을 nextLine()이 아닌 next로 받아서 charAt()으로 처리하는 방식을 사용하면 위와 같이 nextLine()을 두 번 사용하거나 char 배열을 사용하지 않고 조금 더 간결하게 해결할 수 있다. 아직 BufferedReader 를 사용하지 않고 Scanner로만 구현하기 때문에 코드를 개선시키는 것에는 아직 배워야할 내용이 더 필요할 것 같다.

저작자표시 비영리 (새창열림)

'Problem Solving > BOJ' 카테고리의 다른 글

[백준 1065/함수]한수 - JavaScript  (0) 2021.10.10
[백준 4344번/1차원 배열] 평균은 넘겠지 - Java  (0) 2021.03.15
[백준 8958번/1차원 배열] OX퀴즈 - Java  (0) 2021.03.15
[백준 1546번/1차원 배열] 평균 - Java  (0) 2021.03.15
[백준 3052번/1차원 배열] 나머지 - Java  (0) 2021.03.15
    'Problem Solving/BOJ' 카테고리의 다른 글
    • [백준 1065/함수]한수 - JavaScript
    • [백준 4344번/1차원 배열] 평균은 넘겠지 - Java
    • [백준 8958번/1차원 배열] OX퀴즈 - Java
    • [백준 1546번/1차원 배열] 평균 - Java
    Ethan(기린)
    Ethan(기린)

    티스토리툴바