티스토리 뷰
1. B - Trained?
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n + 1];
boolean[] visited = new boolean[n + 1];
for (int i = 1; i <= n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
int cur = 1;
visited[cur] = true;
int ans = 0;
while (cur != 2) {
if (!visited[arr[cur]]) {
cur = arr[cur];
visited[cur] = true;
ans++;
} else break;
}
bw.write((cur == 2 ? ans : -1) + "");
bw.flush();
bw.close();
br.close();
}
}
2. A - Irreversible operation
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
String str = br.readLine();
long cnt = 0;
long ans = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == 'W') {
ans += cnt;
} else if (str.charAt(i) == 'B') {
cnt++;
}
}
bw.write(ans + "");
bw.flush();
bw.close();
br.close();
}
}
3. A - ><
개선
- 결과값을 저장하는 배열에 포커싱을 두고 입력 받은 문자열을 처리한다는 접근보다 입력 받은 문자열을 기준으로 결과값을 만들어낸다는 접근이 생각이 더 편했던 문제.
- 현재 값이 이전 값에 따라 결정되어 따로 count 변수를 이용할 필요없이 이전 값을 이용해 현재 값을 채울 수 있다. 코드의 의미가 좀 더 명확해지고 깔끔해진다. 첫 제출 코드는 꽤 지저분했다.
- stream을 이용하면 코드를 줄일 수 있다. 앞으로 의식하면서 계속 사용해야겠다.
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
String str = br.readLine();
long[] arr = new long[str.length() + 1];
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '<') {
arr[i + 1] = Math.max(arr[i + 1], arr[i] + 1);
}
}
for (int i = str.length() - 1; i >= 0; i--) {
if (str.charAt(i) == '>') {
arr[i] = Math.max(arr[i], arr[i + 1] + 1);
}
}
bw.write(Arrays.stream(arr).sum() + "");
bw.flush();
bw.close();
br.close();
}
}
4. B - ss
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
String str = br.readLine();
int ans = 0;
for (int len = 2; len < str.length(); len += 2) {
for (int i = 0; i + len - 1 < str.length(); i++) {
String left = str.substring(i, i + len / 2);
String right = str.substring(i + len / 2, i + len);
if (left.equals(right)) ans = len;
}
}
bw.write(ans + "");
bw.flush();
bw.close();
br.close();
}
}
5. D - ModSum
풀이
(1 mod 2) + (2 mod 3) + ... + (N-1 mod N) + (N mod 1)이 되도록 하는 게 최선이다. 어떤 permutation 값을 바꾸든 기존 값보다 적어진다는 것을 보여주면 된다.
케이스를 마지막 번재 값과 다른 어느 값을 바꾸는 경우, 마지막 번째를 제외한 나머지 중 어느 두 값을 바꾸는 경우로 나눌 수 있다.
- 마지막 번째 제외
i < j라 하자. 그럼 x_i = i + 1이고 x_j = j + 1이다. (j mod (i + 1)) + (i mod (j + 1)) <= i + i < i + j = (i mod (i + 1)) + (j mod (j + 1))이므로 반드시 손해를 본다.
- 마지막 번째를 포함
(i mod 1) + (N mod (i + 1)) = (N mod (i + 1)) <= i = (i mod (i + 1)) + (N mod 1)이므로 서로 바꿔도 이득을 얻진 않는다.
따라서 기존의 방식은 최적이며, 정답은 1 ~ N - 1까지의 합이다.
개선
- Even인지 판단하는 부분을 짤 때, 지원해주는 라이브러리를 사용하지 않고 일일이 구현했다. 문자열에 관한 문제는 기본으로 제공해주는 라이브러리를 잘 활용할 수 있도록 의식해야 된다.
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
long n = Integer.parseInt(br.readLine());
long ans = (n - 1) * n / 2;
bw.write(ans + "");
bw.flush();
bw.close();
br.close();
}
}
'컴퓨터공학 > Problem Solving' 카테고리의 다른 글
Atcoder Boot camp Problems Medium 6 ~ 10 (0) | 2022.11.14 |
---|---|
[백준/BOJ] 1152 : 단어의 개수 (자바/Java) (0) | 2022.09.12 |
[백준/BOJ] 1008 : A/B (자바/Java) (0) | 2022.09.12 |
[백준/BOJ] 1001 :A-B (자바/Java) (0) | 2022.09.12 |
[백준/BOJ] 1000 : A+B (자바/Java) (0) | 2022.09.12 |
- Total
- Today
- Yesterday
- 부트 캠프
- 백준 2336
- boj 1106
- 제로베이스 스쿨
- boj 2336
- boj 10473
- 백준 3006
- 백준 2243
- 인간 대포
- boj 16562
- boj 9345
- 백준 14868
- 백준 1280
- 사탕상자
- boj 2243
- Ugly Numbers
- 디지털 비디오 디스크
- 제로베이스 백엔드 스쿨
- 백준 10473
- 백준 10775
- boj 14868
- 터보소트
- 백준 1106
- boj 3006
- boj 10775
- 백준 9345
- boj 12713
- 백준 16562
- 백준 12713
- boj 1280
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |