문제: N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하라.
(출처: https://www.acmicpc.net/problem/11720)
이 문제는 문제를 이해하는 것부터 힘이 들었다. 문제를 이해하지 못하니 문제가 당연히 안풀리지.
공백 없이 한 번에 숫자를 받아서 그 숫자를 다 더하라는데, 나는 포문을 돌려서 하나씩 받았으니 공백과 함께 다 받은 셈.
그래서 계속 틀려서 매우 화가 났다고 한다... 어려운 문제도 아닌데 나만 유별나게 참 오래 걸렸다.
게다가 틀렸을 때 코드는 남들의 10배정도로 길었다. ㅋㅋㅋㅋㅋㅋ 바보
몇개의 숫자를 입력받을지에 대한 N을 입력받은 후, 그 숫자만큼 숫자를 입력받을 때가 문제였다.
입력 받는 N의 크기는 100까지였고, 한 번에 100자리를 입력할 순 없으니까.
데이터 타입 - int형
int타입은 4byte(32bit)로 표현되는 정수값을 저장할 수 있는 데이터 타입.
저장할 수 있는 값의 범위 : -2,147,483,648 ~ 2,147,483,647(-2^31 ~ (2^31-1))
그래서 문자형으로 숫자 자리를 받은 다음에 그 받은 숫자들을 char형으로 나눠서 또 그 나눈 글자들을 숫자화 시켜서 각각 저장해주는 방법을 활용해야 했다. 하앜하앜
처음엔 또 그걸 생각을 못해서 char배열을 다시 만들고 또 int배열을 만들어서 하나하나 나눠서 포문을 돌리고 또 돌리고 했는데, 그럴 필요 없이 그냥 그 순간순간 글자를 숫자화 해서 더해주면 된다.
예외처리를 하자면 한참 해야할 것 같은데, 숫자를 어떻게 입력하는지에 대한 오류처리만 했다.
위에서 숫자 받는 예외처리를 하고(언제나처럼),
그리고 그 숫자와 갯수정도는 맞추어줘야 할 것 같아서 그냥 그 정도의 예외처리 정도만...
String->char 변환
String S = "ciel325";
char C = S.charAt(0); -> : c
()안의 숫자는 String S의 글자들의 배열 순서이다. 그러므로 0번째 글자인 c가 char C가 된다.
그런데 이때, char를 int로 바로 바꾸는 조오오오오은 방법이 있다.
int A = S.charAt(4)-'0'; : 3
이 때 char는 아스키코드값으로 나오는데, 3에대한 아스키코드값은 51, 0에대한 아스키코드값은 48이다. 따라서 63-60은 3이 나온다.
int B = S.charAt(0)-'0'; 의 경우를 보자면
소문자 c의 아스키코드값은 99, 0의 아스키코드값은 48, 99-48=51. 출력을 해보면 51이 나온다.
이렇게!
아스키코드 (출처: http://littletrue.egloos.com/m/4781098)
그리고 나서는 그냥 스트링으로 받은 애들을 숫자로 다 바꿔준 다음에 포문으로 그때그때 더해줬다.
더해줄 값으로 sum을 선언해주고 거기에 하나하나 그냥 더해줬다.
앞서서 풀 때는 char를 int로 또 변형해줘야 할거 같아서 배열 선언을 해서 char배열에 우선 다 하나하나 넣고, 또 int배열 선언해서 하나하나 넣어준 다음에 그걸 또 포문 돌려서 다 더해주느라.. 남들보다 열배로 긴 코드가 완성된 것이었다었다었다!! 흑흑
저 세줄이면 끝날 코드였는데...ㅋㅋㅋㅋㅋㅋㅋㅋ
그 어떤것보다 쉬운 문제였는데,
1) 문제를 이해못함
2) 데이터형 int 타입에 대한 이해 부족
3) String, char 활용에 대한 이해도 부족
4) 그냥 아는게 없어서 못푼거나 마찬가지
어쨌거나 많이 배워서 다행.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public class Sum { public static void main(String arg[]) { Scanner scan = new Scanner(System.in); System.out.println("몇개의 숫자를 입력할 것인지 숫자를 넣어주세요. (1~100)"); int N = scan.nextInt(); boolean A = true; while (A) { if (N < 1 || N > 100) { System.out.println("다시 입력해주세요"); N = scan.nextInt(); } else { A = false; } } System.out.println("숫자를 한 번에 입력해주세요."); A = true; String numbers; numbers = scan.next(); while(A) { if(numbers.length() != N) { System.out.println(N + "개의 숫자를 입력해주세요."); numbers = scan.next(); } else { A = false; } } int sum=0; for(int i=0 ; i<N ; i++) { sum = sum + numbers.charAt(i)-'0'; } System.out.println(sum); scan.close(); } } | cs |
'건승하고있어요 > 알고리즘' 카테고리의 다른 글
[별찍기] 별찍기3 (0) | 2018.01.28 |
---|---|
[나누기] A/B 출력하기 (0) | 2018.01.28 |
[for문] n의 합 (0) | 2018.01.28 |
[별찍기] 요리조리 별찍기 (0) | 2018.01.28 |
[별찍기] 세상 쉬운 별찍기(인데 나는 못함) (0) | 2018.01.28 |