(24.03.27) 백준 문제 풀기 + 이전 강의들 복습
오늘은 날씨도 좋지만 하루종일 문제 푸느라 컴터 앞에 앉아있었고,
계속 틀려서 멘탈이 흔들렸다 지금도!
백준 문제 풀기
백준 단계별로 풀기를 하는데 생각보다 기초적인 이론적인게 많아서 프로그래머스에서 했던 알고리즘 문제에 단련이 되어있어서인지 진도를 빠르게 진행할 수 있었다.
단! 역시 공간 복잡도, 시간복잡도 관련해서도 CS강의 때 어려움이 있었는데 이것에 대한 문제는 한참 또 헤매느라 골치가 좀 아프긴 했다..
시간복잡도 점근적표기
O(g(n)) = {f(n) | 모든 n ≥ n0에 대하여 f(n) ≤ c × g(n)인 양의 상수 c와 n0가 존재한다} : 어떠한 시간복잡도를 나타내는 알고리즘어로 작성된 정의문
함수 f(n) = a1n + a0, 양의 정수 c, n0가 주어질 경우 O(n) 정의를 만족하는지 알수 있도록
결국 시간복잡도를 나타내기 위한 f(n) 함수가 n 점 이상에서 부터는 g(n)보다 같거나 낮아야한다는 의미
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main{
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String n_nums = br.readLine();
String[] arr = n_nums.split(" ");
int a1 = Integer.parseInt(arr[0]);
int a0 = Integer.parseInt(arr[1]);
int c = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
if (a1 <= c && a1*n + a0 <= c*n ){
System.out.println(1);
} else {
System.out.println(0);
}
br.close();
}
}
빅 오 표기법에 의한 시간복잡도를 어떤 그래프로 가정해서 그에 대한 비교를 하는 식인데,
빅 오 표기법의 상수시간 O(1), 선형시간O(n), 로그시간 O(log n) 등의 복잡도를 2차 함수처럼 생각할 수 있는가라는 문제인것 같다.
물론 이론은 쉬었지만, 문제 자체가 "알고리즘 어" 를 기준으로 보여주기 때문에 Java처럼 프로그램어 인줄 머리가 좀 아프긴 했다. 하지만, 앞으로는 알고리즘 어에 익숙 할 수 있도록 해야할듯
프로그래머스에서 거의 맨땅에 헤딩하듯이 울면서 풀었던 문제들이 알고리즘의 유형중 하나였다는게 좀 억울하긴 하지만,, (백준에서는 쉬운것 부터 차례대로 풀 순 있는 시스템이다)
일단은 문제를 풀면서 이해가 되지 않는것 풀기 힘든 것, 관련해서 알아야할 Java 지식을 알아가는 방식을 취하는 것은 변경하지 않도록. 거기에다가 복습하는 개념을 더 하는 것이 좋을 듯
오늘은 매니저님과 상담도 했고, 이것저것 알아보면서 백준을 풀기는 했는데.. 생각보다 어떤 문제를 던져주고 그걸 푸는 느낌이 아니라서 적응하는데 꽤 시간이 걸렸다.
하면할수록 내가 이해하고 코드가 틀렸다곤 뜰때마다 자존감이 떨어지면서 울고 싶지만.. 열심히 해야지..
'Today I Learned' 카테고리의 다른 글
(24.03.29) Java의 정석 학습(Arrays 메서드) (1) | 2024.03.29 |
---|---|
(24.03.28) 백준 문제 풀기 + Java의 정석 학습 (0) | 2024.03.28 |
(24.03.26) Java의 정석 학습(지네릭스)_2 (0) | 2024.03.26 |
(24.03.25) Java의 정석 학습(지네릭스) (0) | 2024.03.25 |
(24.03.22) Java의 정석 학습(예외처리 exception handling) (0) | 2024.03.22 |