CS/Coding Test8 [백준/1764/Kotlin] 듣보잡 문제문제를 풀 때 시간 복잡도를 생각하고 풀자는 의미에서 이번 포스팅을 하게 되었다. 이 문제는 "듣도 못한 사람"의 리스트와 "보도 못한 사람"의 리스트 중 중복되는 데이터를 사전 순으로 출력하는 문제이다. 트러블 슈팅1) 시간 초과처음에 코드를 작성했을 때 출력은 제대로 되었는데 막상 백준에서 돌려보니 시간 초과 문제가 발생하였다.내가 작성한 코드의 흐름은 아래와 같다.val neverHeard : MutableSet = mutableSetOf()val result : MutableSet = mutableSetOf()repeat(n) { neverHeard.add(bufferedReader.readLine())}repeat(m) { val neverSeen : String = buffere.. 2025. 3. 16. [백준/11399/Kotlin] ATM 문제이번에 푼 문제는 누적된 합의 최솟값을 구하는 문제이다.각 개인에게 걸린 값의 합이 최소가 되게 하려면 큰 값은 가장 나중에 더해줘야 되기 때문에 오름차순 정렬을 해주고자 했다.이번에는 내가 놓쳤던 부분에 대해서 정리하고자 한다. 트러블 슈팅1) 띄어쓰기 별로 읽기처음에 BufferedReader.readLine()은 라인별로 읽는다고 생각해서 나는 띄어쓰기 별로 읽어야 하므로 BufferedReader.read()를 사용했었다. 그러나, read() 함수를 사용하면 한 글자(문자)를 읽어 해당 문자의 ASCII 값을 반환한다고 한다. 그래서 readLine().toInt()로 하되, 공백(" ")을 기준으로 분리(split)를 하고, 이를 다시 list로 반환하게 해줬다.val numberList .. 2025. 3. 6. [백준/2751/Kotlin] 수 정렬하기 2 코딩테스트 공부를 다시 시작하려고 한다.어떤 언어로 공부해야 되나 고민이 됐는데 아무래도 Kotlin으로 손이 가서 쉬운 문제부터 차근차근 시작하고자 했다. 문제 문제는 꽤나 쉬운 편에 속한다.이번에는 코틀린의 간단한 문법들을 알아봐서 나중에 시간을 줄여보고자 한다.문제 풀이1) 입출력 흐름표준 입력(System.in)으로부터 데이터를 읽어오기 위해 BufferedReader를 생성한다.표준 출력(System.out)으로 결과를 내보내기 위해 bufferedWriter를 생성한다.그리고 여러 개의 문자열을 빨리 출력하기 위해 StringBuilder를 사용한다. (append를 이용하면 효율적이기 때문)StringBuilder에 모아둔 내용을 한 번에 bufferedWriter로 써서 출력한다.입출력에 .. 2025. 3. 4. [BOJ/1929/C++] 소수 구하기 소수 구하는 문제라 쉬울 거라고 생각하고 자신있게 문제를 풀었다..그래서 아래와 같이 구했고, 답도 제대로 나왔다.#include#includeusing namespace std;int main(void){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int M, N; vector vector; cin >> M >> N; for (int i = M; i 그러나 오늘도 어김없이 나오는 시간초과,, 그래서 찾아보니 에라토스테네스의 체 라는 방법이 있었다.이게 뭐냐하면 2 이상의 구하고자 하는 범위 내에 존재하는 자연수를 모두 나열한 뒤, 2 이상 배수들을 차례로 지워나가는 방법이라고 한다! 에라토스테네스의 체의 시간복잡도는 O(N log(log N))으.. 2024. 2. 4. [BOJ/9205/C++] 맥주 마시면서 걸어가기 오랜만에 골드 문제를 풀어보았다.그만큼 시간 소요도 오래 되었고 BFS를 이용해서 푸는 것은 알았지만, 적절하게 활용하는 것이 어려웠다. 거의 다 왔다고 생각하며 풀어보려고 했지만 계속 나는 런타임 에러,,코드 자체에 문제가 있었다기 보다 코드의 흐름이 맞지 않았던 것 같다. 그래서 처음부터 다시 문제를 풀었다.우선 이 문제에서 구조체를 사용했다. 내가 Java로 코테를 준비할 때도 BFS 문제는 생성자를 이용해서 풀었다.C++도 이런 성질을 이용해서 푸는 것이 용이했다. main() 함수를 먼저 작성했기 때문에 main() 함수 먼저 살펴보자int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); int t; cin.. 2024. 2. 1. [BOJ/1181/C++] 단어 정렬 이 문제가 비교적 쉬울지라도 나는 문자열이 나오는 문제를 어려워했기 때문에 이번에는 기록해두고 싶어서 적어본다. 우선 문자열을 입력받고 그것을 길이 순으로 지정하는 방법에 대해 고민해보았다.이때 유용하게 사용할 수 있는 방법이 있는데, C++의 헤더에서 제공해주는 sort() 함수이다. sort() 함수는 정렬할 범위를 알고, 그 범위 내의 각 요소 쌍에 대한 함수를 호출할 수있다. 즉, 아래의 코드에서 보았을 때 str[] 배열에 있는 각 요소에 대해 compare() 함수의 입력으로 사용하고 있는 것을 알 수 있다.이 비교 결과에 따라 요소의 위치를 재배치한다.#include#include#define MAX 20000using namespace std;bool compare(string x, st.. 2024. 1. 26. [BOJ/11055/C++] 가장 큰 증가하는 부분 수열 이번에 푼 문제는 dp를 이용해서 푸는 문제였다. 예를 들어 수열 A에서 3번 째에 있는 수가 1번 째, 2번 째에 있는 수보다 크면 3번 째까지 증가하는 부분 수열의 합을 dp 배열에 저장해놓는 방식이다. 그러면 배열 dp에서 오름차순으로 정렬을 했을 때 제일 오른쪽에 있는 수가 최댓값이 될 것이다.#include#includeusing namespace std;int main(void){ int N; cin >> N; int A[1001]; int dp[1001]; for (int i = 0; i > tmp; dp[i] = A[i] = tmp; } for (int i = 0; i 2024. 1. 6. [BOJ/12931/C++] 두 배 더하기 이번에 푼 문제는 "두 배 더하기"이다.문제에서는 배열 A를 배열 B로 만들기 위한 연산의 최소 횟수를 구하라고 하였다. 그래서 당연히 배열 A를 B로 만들기 위한 최소 연산 과정을 고민하였다. 그러나 이렇게 푸는 것보단 배열 B를 배열 A로 만드는 것이 더 효율적이라는 것을 깨달았다.그렇게 된다면 계산 과정은 반대가 될 것이다.배열에 있는 값 하나 1 빼기배열에 있는 모든 값을 2로 나누기그리고 배열에 있는 모든 숫자가 0이 되면 배열 A를 만든 것이기 때문에 성공한 것이다. 문제 로직은 다음과 같다.#include #include using namespace std;int main(void){ int N, tmp; int count = 0; cin >> N; vector B; .. 2024. 1. 3. 이전 1 다음