내가 생각했을때 문제에서 원하는부분
첫째 줄에 테스트 케이스의 수 (< 100)가 주어진다.
각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.
각 테스트 케이스마다 n을 만드는 쌍을 사전순으로 출력한다.
n을 만드는 쌍이 없는 경우에는 아무것도 출력하지 않는다.
예제 출력 형식을 참고해 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 사용하여 입력을 읽고, 첫 번째 줄에서 테스트 케이스의 수 t를 읽는다.
결과를 효율적으로 누적하기 위해 StringBuilder를 사용해준다.
테스트 케이스 반복:
각 테스트 케이스에 대해 자연수 n을 읽고, 결과 문자열에 "Pairs for n:"을 추가한다.
쌍 찾기:
1부터 n-1까지 반복하면서, n을 만드는 두 자연수 a와 b를 찾는다.
a가 b보다 작은 경우만 쌍으로 인정한다.
결과 정리:
쌍이 발견된 경우, 마지막 쉼표를 제거하고 줄바꿈을 추가한다.
쌍이 없는 경우에도 줄바꿈을 추가한다.
최종 결과를 StringBuilder에서 문자열로 변환하여 한 번에 출력한다
코드로 구현
package baekjoon.baekjoon_25;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 5217번 문제
public class Main881 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i = 0; i < t; i++) {
int n = Integer.parseInt(br.readLine());
sb.append("Pairs for ").append(n).append(":");
boolean found = false;
for(int a = 1; a < n; a++) {
int b = n - a;
if(a < b) { // a와 b가 다르고 a가 b보다 작은 경우
sb.append(" ").append(a).append(" ").append(b).append(",");
found = true;
}
}
if(found) {
sb.deleteCharAt(sb.length() - 1); // 마지막 쉼표 제거
sb.append("\n");
} else {
sb.append("\n"); // 쌍이 없는 경우 새 줄 추가
}
}
System.out.print(sb.toString()); // 결과를 한 번에 출력
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.