https://www.acmicpc.net/problem/10817
오답
public class BOJ_10817 {
public static void main(String[]args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int [] arr = new int[3];
for(int i=0;i<arr.length;i++){
arr[i] = Integer.parseInt(st.nextToken());
}
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
System.out.println(arr[1]);
}
}
다음과 같이 두 번째 값만 출력 된다.
3개의 값을 비교해서 두 번째로 작은 수의 값을 출력해야하기 때문에 위의 코드는 오답이다.
그럼 어떤 부분이 문제일까?
바로 조건식의 누락 때문이다.
조건에 부합하는 값이 없기 때문에 인덱스의 두 번째 값만이 출력 된 것이다 !
따라서 arr 배열의 i번째 인덱스의 값이 j번째 인덱스의 크기 보다 클 경우, i의 값과 j의 값을 변경해준다.
조건식을 추가하니까 정상적으로 출력된다!
정답
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[]args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// StringTokenizer를 이용해 입력된 값을 공백을 기준으로 똑똑 떼어낸다.
StringTokenizer st = new StringTokenizer(br.readLine()," ");
// 크기가 3인 배열을 선언한다
int [] arr = new int[3];
// 배열의 크기 만큼 (여기서는 3회를 의미한다) 배열의 i번째 인덱스에 토큰을 대입한다.
// 이때 nextToken()은 String을 반환하기 때문에 Integer.parseInt를 해줘야한다.
for(int i=0;i<arr.length;i++){
arr[i] = Integer.parseInt(st.nextToken());
}
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
// i번째 인덱스와 j번째 인덱스의 크기를 비교한다.
if(arr[i]>arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(arr[1]);
}
}
728x90
'📓 Study > Coding Test' 카테고리의 다른 글
[Programmers/JAVA] 직사각형 별찍기 (0) | 2021.09.22 |
---|---|
[Programmers/JAVA] 짝수와 홀수 (0) | 2021.09.21 |
[BOJ] 2438번 별찍기 (0) | 2021.09.12 |
[BOJ] 5543번 | 상근날드 (0) | 2021.09.02 |
[BOJ] 15552번 | 빠른 A+B (0) | 2021.07.26 |
댓글