배치고사 5판이 끝나고 처음으로 보는 코드포스. 아이언은 턱걸이로 일단 탈출했다. 총 3문제를 풀었는데 D부터는 풀이가 정말 상상도 못하는 방법이었기 때문에 아쉽지는 않다. 문제를 좀 더 빨리 풀지 못한것이 아쉽다.
문제를 읽다 보니 한번 어떤 일이 끝나면 다시 일을 할 수 없다고 하는데 그러면 한번 나왔던게 다시 안나오는지만 확인해 주면 되겠다. 문제 전부 안 읽고 대충 예상해서 4분만에 맞췄다!
public class A {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder ans = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
for (int tc = 0; tc < TC; tc++) {
int N = Integer.parseInt(br.readLine());
boolean[] check = new boolean[26];
String S = br.readLine();
boolean ok = true;
for (int i = 0; i < N; i++) {
int ch = S.charAt(i) - 'A';
if (check[ch] && S.charAt(i) != S.charAt(i - 1)) ok = false;
check[ch] = true;
}
ans.append(ok ? "YES" : "NO").append("\n");
}
System.out.print(ans);
}
}
모든 자리수가 같은 숫자를 ordinary number라고 하고 이하의 ordinary number를 모두 구하는 건데 대충 생각하고 꼴만 계속 더해나가면 되는줄 알고 제출한다음에 C로 넘어갔었다. 그런데 큐에서 한 15분 후에 채점이 돌아가더니 바로 틀렸다... 원인은 자리수가 바뀔때마다 꼴에서 다시 시작해야하는데 계속 더해서만 그런거였다. 그런데 이거 고치겠다고 급하게 제출하다가 디버깅 출력문도 안고치고 내고 이런식으로 해서 3번 더 틀렸다 30분 낭비한건 덤. 코드가 너무 복잡해지면 멈추고 생각을 정리한다음에 다시 써도 늦지 않는다는 것을 깨달았다.
public class B {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder ans = new StringBuilder();
int TC = Integer.parseInt(br.readLine());
int[] d = {1, 11, 111, 1111, 11111, 111111, 1111111, 11111111, 111111111, 1111111111};
for (int tc = 0; tc < TC; tc++) {
int N = Integer.parseInt(br.readLine());
int cnt = 0; int i = 1;
while (i <= N) {
if (i % 10 == 9) i = d[String.valueOf(i).length()];
else i += d[String.valueOf(i).length() - 1];
cnt++;
}
ans.append(cnt).append("\n");
}
System.out.print(ans);
}
}
1부터 까지 정수들 배열에 나열한다. 단 인접한 위치는 최소 2이상 차이가 나야 한다. 가능한 배치를 출력하는 문제
우선 손으로 해보다가 123 654 ... 이런 꼴은 안된다는 것을 깨달았고, 맨 윗줄만 완성시키면 아래로는 행렬의 행 수만큼 더하면서 만들면 된다는 것을 깨달았다. 맨 윗줄은 까지는 으로 가능한데, 그 다음부터는 그냥 어느쪽에 붙여도 상관이 없었다.
public class C {
static final String[] example = {"", "1", "-1", "2 9 7\n4 6 3\n1 8 5"};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int TC = Integer.parseInt(br.readLine());
for (int tc = 0; tc < TC; tc++) {
int N = Integer.parseInt(br.readLine());
if (N <= 3) System.out.println(example[N]);
else {
Deque<Integer> dq = new LinkedList<>();
dq.offer(2); dq.offer(4); dq.offer(1); dq.offer(3);
for (int i = 0; i < N - 4; i++) {
if (i % 2 == 0) dq.offerFirst(i + 5);
else dq.offerLast(i + 5);
}
for (int i = 0; i < N; i++) {
StringBuilder ans = new StringBuilder();
for (int x : dq) ans.append(x + N * i).append(" ");
System.out.println(ans.toString().trim());
}
}
}
}
}