
| 문제 | 레벨 | 정답률 |
|---|---|---|
| 홀수만 더하기 | D1 | 70% |
import java.util.*;
import java.io.*;
class Solution{
public static void main(String args[]) throws Exception{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
sc.nextLine();
for(int test_case = 1; test_case <= T; test_case++){
String line = sc.nextLine();
String[] tokens = line.split(" ");
int[] numbers = new int[tokens.length];
for(int i = 0; i<tokens.length; i++){
numbers[i] = Integer.parseInt(tokens[i]);
}
int sum = 0;
for(int i : numbers){
if(i%2 == 1){
sum += i;
}
}
System.out.println("#" + test_case + " " + sum);
}
}
}
입력된 값들을 line별로 읽어들이고, 이를 split() 메서드를 활용해 띄워쓰기 기준으로 나눠 String 배열에 저장하였다.
그리고 이를 for문을 돌면서 다시 int로 변환 후 저장하고,
홀수인 값들을 더해서 sum 변수에 저장하였다.
마지막으로 이들을 전부 출력.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Solution{
public static void main(String args[]) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine().trim());
for(int test_case = 1; test_case <= T; test_case++){
StringTokenizer st = new StringTokenizer(br.readLine());
int sum = 0;
while (st.hasMoreTokens()) {
int num = Integer.parseInt(st.nextToken());
if (num % 2 == 1) {
sum += num;
}
}
System.out.println("#" + test_case + " " + sum);
}
br.close();
}
}
사실 기본으로 제시된 코드에서 Scanner를 사용하였기에 그대로 사용하였는데, BufferedReader를 사용하는게 더 효율적이라고 한다.
더 빠르고, 메모리도 더 적게 쓰고, 다양한 형식을 처리할 수 있는 이유.
그리고 입력된 문자열을 공백을 기준으로 분할하는 대신에 StringTokenizer 클래스를 사용해서 분할하였다.
효율적인 입출력을 위한 버퍼링된 문자 입력 스트림
문자열을 특정 구분자를 기준으로 분리하는 데 사용.
공백, 탭, 개행과 같은 공백 문자를 기준으로 문자열 분리
ㄴ 사용자 지정 구분자도 가능
입력 문자열을 간단히 분리해서 각각의 토큰으로 처리 가능
싸피 코테를 준비하기 위해서 SWEA 문제를 처음 풀어보았다.
삼성 코테가 일반 코테와 형식이 다르다고 들어서, 익숙해지기 위해서 우선 가장 쉬운 단계를 풀어보았는데 문제 자체는 당연히 쉽다. 그러나 익숙하지 않은 환경과 프로그래머스와 달리 입출력을 구현해야한다는 점이 낯설어서 빨리 적응해야겠다.
프로그래머스에서는 주로 클래스에서 매개변수로 데이터를 넣고 return으로 답을 내보내는데,
SWEA에서는 백준처럼 입출력으로 처리하다보니 별건 아니지만 낯선 기분이다.
그리고 프로그래머스와 달리 문법이 자동으로 채워지지 않는다. (괄호 열기 하면 자동으로 닫기가 출력되는 등..) 그래서 이런 것도 좀 낯설어서 처음 코드 입력할때 사소한 문법 오류가 발생했다.
이틀간 많이 연습해야될 것 같다 🥹
nextInt()로 정수를 입력받고, nextLine()으로 문자열을 입력받으니 남아있던 개행 문자 때문에 문제가 발생했다..
nextInt() 대신에 next() 메서드로 입력받아서 이를 해결했다.