https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PmkDKAOMDFAUq
문제 접근
값 입력받고 인덱스당 10개씩 문자를 담아주면 되겠다 생각
처음엔 배열로 만들었으나 배열은 크기가 지정되있기 때문에 추가해야할 단어들이 한 줄에 10개가 넘어가면 다음 인덱스를 추가 해줄 수가 없었다. → 크기 1의 배열에 B 20인 경우면 인덱스 초과
그래서 List를 사용하여 한 줄의 크기가 10이 넘어가면 다음 인덱스를 만들고 거기에다가 단어를 계속 넣어주었다.
buffer랑 tokenizer를 오랜만에 써서 쓰는 방법을 헷갈렸다.
처음엔 scanner로 했으나 nextLine이 엔터를 잡아먹으면서 또 다시 nextLine를 적어주고 해야되서 그냥 속도 빠른 buffer 쓰기로 하였음
import java.util.*;
import java.io.*;
public class Solution {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.valueOf(br.readLine());
for(int i=0; i<T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
List<String> strList = new ArrayList<>();
int count = 0;
strList.add(""); // List 첫 인덱스
for(int j=0; j<N; j++) {
st = new StringTokenizer(br.readLine());
String C = st.nextToken();
int K = Integer.parseInt(st.nextToken());
for(int m=0; m<K; m++) {
if(strList.get(count).length() >= 10) {
count++;
strList.add("");
}
strList.set(count, strList.get(count)+C);
}
}
System.out.println("#"+(i+1));
for(String s : strList) System.out.println(s);
}
}
}
다른 사람 풀이
이 사이트는 왜 문제를 풀어도 사이트 내에 다른 사람 코드를 볼 때 점수를 차감하는 걸까?
이 분은 배열과 스캐너로 풀었는데, 난 배열의 크기를 처음에 지정해놓고 풀려고 했기 때문에 도중에 크기가 안맞아서 List로 우회했던 것관 다르게 이 분은 문자들의 갯수만큼 아예 배열의 크기를 잡아서 모자랄 일이 없게 만들었다.
문자들의 총 갯수 크기의 배열을 만들고 모든 인덱스에 문자들의 각 갯수만큼 집어넣었다.
이후 배열 크기만큼 반복문을 돌면서 10개씩 인덱스를 출력
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int tc = 1; tc <= T; tc++) {
int N = sc.nextInt(); // 문자와 숫자 쌍
int idx = 0;
String[] s = new String[N];
int total = 0;
int[] num = new int[N];
for(int i = 0; i < N; i++) {
s[i] = sc.next(); // 문자
num[i] = sc.nextInt(); // 숫자
total += num[i]; // 숫자들의 총합
}
String [] arr = new String[total]; // 숫자 총합 크기의 배열
for(int i = 0; i < N; i++) {
for(int j = 0; j < num[i]; j++) {
arr[idx] = s[i]; // arr[0] = A, arr[1] = A, arr[2] = A ...
idx++;
}
}
System.out.println("#" +tc);
for(int i = 0; i < idx; i++){
if(i != 0 && i%10 == 0) { // i !=0 안해주면 처음에 바로 줄이 넘어간다.
System.out.println();
}
System.out.print(arr[i]);
}
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA / 초심자의 회문 검사 / JAVA] (0) | 2023.04.25 |
---|---|
[SWEA / 스도쿠 검증 / JAVA] (0) | 2023.04.07 |
[SWEA / 달팽이 숫자 / JAVA] (0) | 2023.04.06 |
[SWEA / 조교의 성적 매기기 / JAVA] (0) | 2023.03.30 |
[SWEA / 중간 평균값 구하기 / JAVA] (0) | 2023.02.20 |
댓글