본문 바로가기

전체 글

(39)
[BOJ] 4141 Numbersrebmun 문제 링크 www.acmicpc.net/problem/4141 풀이 각 글자에 대해 숫자로 매핑해준 후 팰린드롬인지 검사하면 된다. Java 코드 더보기 처음엔 뒤집을 때도 StringBuilder를 이용해서 s를 다시 거꾸로 순회하며 구축한 후 비교해줬는데, StringBuffer의 reverse 메서드를 사용하면 그럴 필요가 없었다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringBuilder out = new StringBuilde..
[BOJ] 5637 가장 긴 단어 문제 링크 www.acmicpc.net/problem/5637 풀이 알파벳 또는 하이픈으로 이루어진 문자들만 받아서 현재 길이보다 길어질 때만 갱신하면 된다. C 코드 더보기 #include #include #include int main(void) { char ans[101] = "", tmp[101] = ""; while (~scanf(" %[a-zA-Z\-]", tmp)) { getchar(); if (strlen(ans) < strlen(tmp)) strcpy(ans, tmp); } for (int i = 0; ans[i]; ++i) putchar(tolower(ans[i])); return 0; }
[BOJ] 4176 Digits 문제 링크 www.acmicpc.net/problem/4176 풀이 $x_0$은 매우 큰 값이지만, $x_1$부터는 int형으로도 다룰 수 있는 작은 값이 된다. 적당히 케이스를 나눠서 풀면 된다. Java 코드 더보기 import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringBuilder out = new StringBuilder(); while (true) { String s = in.readLine(); if (s.equals("END")) ..
[BOJ] 3546 Headshot 문제 링크 www.acmicpc.net/problem/3546 풀이 만약 랜덤으로 회전시킨 후 방아쇠를 당긴다면 살 확률은 (0의 개수)/(1의 개수)이다. 회전시키지 않고 바로 방아쇠를 당긴다면 살 확률은 (자신의 뒤에 0이 있는 0의 개수)/(0의 개수)이다. 두 확률을 비교해서 결과를 내면 된다. 이때, 실린더는 환형이므로 맨 앞과 맨 끝이 연결되어 있음에 주의하자. Java 코드 더보기 import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stri..
[BOJ] 20500 Ezreal 여눈부터 가네 ㅈㅈ 문제 링크 www.acmicpc.net/problem/20500 풀이 단순한 DP 문제이다. $dp[i][j] =$ $i$자리 수를 15로 나눈 나머지가 $j$인 경우의 수라고 정의하고 풀면 된다. Java 코드 더보기 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int[][] dp = new int[1516][15]; dp[1][1] = dp[1][5] = 1; for (int i = 1; i < N; ++i) { for (int j = 0; j < 15; ++j) { dp[i + 1][(..
[BOJ] 1359 복권 문제 링크 www.acmicpc.net/problem/1359 풀이 비트가 M개 켜지는 모든 경우에 대해 $2^M-1$과 겹치는 비트가 K개 이상인 경우의 수를 구해주면 된다. Java 코드 더보기 import java.io.*; import java.util.StringTokenizer; public class Main { public static int bitCnt(int n) { int ret = 0; for (; n > 0; n -= n & -n) ret++; return ret; } public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader..
[BOJ] 20673 Covid-19 문제 링크 www.acmicpc.net/problem/20673 풀이 신규 확진자 $p$는 아무래도 더미 정보인 듯하다. 그냥 $q$를 이용해서 10 이하라면 White, 30 이하라면 Yellow, 나머지는 Red를 출력하면 된다. Java 코드 더보기 import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int p = Integer.parseInt(br.readLine()); int q = Integer.parseInt(br.readLine()); i..
[BOJ] 1498 주기문 문제 링크 www.acmicpc.net/problem/1498 풀이 KMP 문제이다. 문자열의 길이가 $a$이고 마지막 인덱스에 해당하는 실패함수의 값이 $b$라고 하자. 이때, $a-b$ 값이 $a$의 약수라면 길이 $a$짜리 문자열은 길이 $a-b$짜리 prefix의 반복임을 알 수 있다. 문제에서 $n$의 값이 1보다 커야 주기문으로 인정하므로, 실패함수의 값이 0보다 커야 한다. 전체 시간복잡도는 $O(|S|)$이다. C++ 코드 더보기 #include #define X first #define Y second #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define ini(x, y) memset(x, y, sizeof(x)) #..