알고리즘 23

[수학1]나머지 연산

컴퓨터의 정수는 저장할 수 있는 범위가 저장되어 있기 때문에, 답을 M 으로 나눈 나머지를 출력하라는 문제가 등장한다. (A +B ) mod M = ((A mod M) + (B mod M)) mod M (A x B) mod M = ((A mod M) x (B mod M)) mod M 나눈 기의 경우에는 성립하지 않는다. (Modular Inver 를 구해야 함) 뺄셈의 경우에는 먼저 mod 연산을 한 결과가 음수가 나눌 수 있기 때문에 다음과 같이 해야 한다. (A-B) mod M = ((A mod M ) - (B mod M)+M)mod M ex ) (6-5)%3 = 1%3=1 이다 ex) (6%3 - 5%3)%3 = (0 - 2)%3 = -2 %3 = ? -- 음수의 경우 결과의 부호가 프로그래밍 언어..

알고리즘 2022.07.25

[알고리즘] - 시작 Java 입출력

Java 에서 입력은 Scanner, 출력은 System.out 을 사용한다 입력 : Scanner sc = new Scanner (System.in); (편리성) 입력은 많은 경우에는 속도가 느리기 때문에, BufferedReader 를 사용한다 BufferdReader br = new BufferdReader(new InputStreamReader(System.in));(속도 빠름) 출력이 많은 경우에는 StringBuilder 를 사용해서 한 문자열로 만들어서 출력을 한 번만 사용하거나 BufferedWriter 를 사용한다 ex) input 10,000 이하의 자연수 10,000,000 개가 적힌 파일을 입력받는데 걸리는 시간 Java (BufferedReader): 0.6585초 Java (Sc..

알고리즘 2022.05.29

[알고리즘] 시작 - 시간 복잡도

알고리즘 시간 복잡도를 이용하면 작성한 코드가 시간이 대략 얼마나 걸릴지 예상 할 수 있다. 시간 복잡도는 소스를 보고 계산할 수도 있고, 소스를 작성하기 전에 먼저 계산해볼 수 있다. 문제를 풀기 전에 먼저 생각한 방법의 시간 복잡도를 계산해보고 이게 시간 안에 수행될 것 같은 경우에만 구현하는 것이 좋다. 문제의 크기 입력범의의 가장 큰 수를 시간복잡도에 대입하여 그 값에 따라 구현여부를 결정함 ex) 1억 -> 1초 n 1-->0.00~1초 (아주 작은 초) 너무 빨라서 무시할수 있는 수 O(N) ->10만 ->0.001초 O(N^2) ->100억 --> 100초 시간 복잡도 안에 가장 큰 입력 범위를 넣었을 때, 1억이 1초 정도이다 이 값은 대략적인 값으로, 실제로 구현해보면 1억을 조금 넘어도..

알고리즘 2022.05.29