1138
한 줄로 서기
- 첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수.
- 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다.
- 줄을 선 순서대로 키를 출력한다.
- ex)
input>
7
6 1 1 1 2 0 0
output>
6 2 3 4 7 5 1
import java.util.Scanner;
public class bj1138_0123 {
public static void main(String[] args) {
// 입력
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
sc.close();
// 결과를 받을 N칸의 배열
int[] res = new int[N];
// 본격 배치
// 1부터 차례로 배치할건데, arr[i]의 정보로 배치.
// - ex) 1은 다 자기보다 크니까 arr[0]칸 만큼 뒤로 가면 됨.
// - 2는 1말고 다 자기보다 크니까 (1은 무조건 건너뛰고) arr[1]칸 뒤로 가면 됨.
for (int i = 0; i < N; i++) {
int cnt0 = 0; // 0을 셀 것임.
for (int j = 0; j < N; j++) {
if (res[j] == 0) // 0이 맞다면 cnt0++을 통해 0 세기.
cnt0++;
if (cnt0 == arr[i] + 1) { // i보다 큰 사람은 arr[i]명, 그 다음0자리에 들어가야 하니까
res[j] = i + 1; // 위를 만족할 만큼 j가 커졌을 때, 그 자리에 i가 들어가면 됨. (실제로 i는 인덱스니까 +1해서)
break;
}
}
}
// 출력
for (int i = 0; i < N; i++)
System.out.printf("%d ", res[i]);
}
}
- 배치하는 단계에서 오류가 많이나서 많이 헤맸다.
- 약간 얻은 교훈은, 내가 실제로 어떤 규칙으로 출력을 낼 것인지를 생각하고, 그걸 체계화해서 적어보면 그게 코드의 힌트가 되는 것 같은 느낌...
1032
명령 프롬프트 (문자열 규칙찾기)
- N을 입력받고, N줄 만큼의 문자열을 입력받는다. (문자열의 길이는 모두 같다.) > 패턴을 출력한다.
- ex)
input>
3
config.sys
config.inf
configures
output>
config????
import java.util.Scanner;
public class bj1032_0123 {
public static void main(String[] args) {
// 입력
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String[] strArr = new String[N];
for (int i = 0; i < N; i++) {
strArr[i] = sc.next();
}
sc.close();
// j의 for문은 0번문자열과 1,2,3...번 문자열을 비교
// i의 for문은 선정된 두 문자열의 0,1,2...번째 문자를 비교, 다를 시 ?로 치환.
for (int j = 1; j < N; j++) {
for (int i = 0; i < strArr[0].length(); i++) {
if (strArr[0].charAt(i) != strArr[j].charAt(i)) {
StringBuffer sb = new StringBuffer(strArr[0]); // java에서 문자열의 특정 인덱스 치환 시 StringBuffer 차용해야...
strArr[0] = sb.replace(i, i + 1, "?").toString();
}
}
}
System.out.println(strArr[0]);
}
}
- 먼가 이런 사이트들에서 사람들이 C/C++/Python으로 주로 푸는 것 같다. 그래서 어렵지 않아보이는 문제도 java로 하려니까 괜히 더 돌아서 가야 하는 것 같은 느낌이 든다...
- 다른 언어 배울 땐 문자열도 그냥 배열처럼 해서 str[index] 이런식으로 쉽게 바꿀 수 있었던 것 같은데 java는 구현하려면 굳이굳이 String을 StringBuffer형 변수에 넣어서 replace함수를 쓴 다음에 다시 toString을 해줘야 하는 구조인 것 같다...
- 혹시 다른 방법도 있을까...
'PS - BOJ' 카테고리의 다른 글
1094, 1015, 1057 - 막대기, 수열 정렬, 토너먼트 (0) | 2022.01.25 |
---|---|
1034 - 램프 (0) | 2022.01.24 |
1124 - 언더프라임 (0) | 2022.01.23 |
10872 - 팩토리얼, 1065 - 한수 (0) | 2022.01.22 |
11729 - 하노이 탑 이동 순서 (빠른 입출력!!) (0) | 2022.01.22 |