CS 공부/알고리즘 풀이 7

[알고리즘] input() 과 sys.stdin.readline().strip() 의 출력차이는?

브론즈4 등급의 간단한 문제였는데, 입력을 sys 로 받고 출력하는 것과 input  으로 받고 출력하는 것이 결과가 달랐다.  먼저 sys 로 작성한 코드는 아래와 같고import systest_case = int(sys.stdin.readline().strip())numbers= []sentence = []for i in range(test_case): numbers.append(int(i)+1) input_line = sys.stdin.readline().strip() sentence.append(input_line)for i in range(test_case): print(str(numbers[i])+".",sentence[i]) input 으로 입력받는 코드는 아래와 같다...

[Baekjoon] 1676번 : 팩토리얼 0 의 갯수 - Silver 5

1. 문제에 대한 접근 및 이해사용자의 입력 값 N 에 대하여 N! 계산을 진행 한 후, 그 값에 대해서 첫째 자리(문제에서는 맨 뒤를 의미)에서 부터 0이 아닌 다른 수가 나오기 까지 0의 갯수를 구해야 한다. ( 1의 자리 부터 0의 갯수를 센다, 10의 자리, 100의 자리를 세서 0이 아닌 자릿수가 나오면 그 이전에 나온 0의 갯수를 구한다.)ex) 10! 의 값은 3,628,800 이다. 1의 자리는 0, 10의 자리는 0, 100의 자리는 8이다. 문제에서 뒤에서부터 처음 0 이 아닌 숫자가 나올때까지 0의 갯수를 구하라고 했으므로, 8이 나오기 전의 0의 갯수는 2 개 이다. ex2) 55! 의 값은 12,696,403,353,658,275,925,965,100,847,566,516,959,..

🧬[너비우선탐색 알고리즘]

깊이우선탐색 알고리즘은 그래프나 트리형태의 자료구조를 탐색하는 알고리즘이었고, 특정 노드를 시작하여 노드의 연결된 끝 까지 탐색하고 나오는 알고리즘 이었다. 이와 다르게 너비우선탐색 알고리즘은 그 이름처럼 특정 노드에서 시작하여 인접한 노드를 먼저 탐색하고, 그 인접노드의 인접노드를 탐색하는 방식으로 진행된다. 따라서 최단경로를 찾거나 레벨 단위로 노드를 탐색할 때 유용(시간이 덜 걸린다) 하다. -> 최단 경로를 찾는 방법은 트리 형태로 경우의 수가 가지 형태로 뻗어 나갈텐데, 레벨이 가장 먼저 끝나는 노드를 만나면 탐색이 종료되니까 유용한 게 맞는 것 같다!! 1. 너비우선탐색 알고리즘의 개념탐색 방식 : 큐 자료구조를 사용하여 구현한다. 시작 노드를 큐에 추가하고, 큐에서 노드를 꺼내면서 그 노드의..

🧬[아리스토테네스의 체]의 소수판별 알고리즘

시간 복잡도를 생각하지 않고 풀던 브론즈 난이도에서는 배열을 생성하고 이중 반복문으로 문제를 많이 해결했다.하지만 Silver 난이도로 올라오면서 슬슬 시간 초과가 발생하는 경우가 빈번히 발생하기 시작하였고, 이에 시간복잡도를 공부하게 되었다. 시간 복잡도를 공부하며 배운 내용을 통해 본다면...배열의 갯수가 n 개이고 이 배열을 이중으로 완전 탐색한다면 시간 복잡도는 O(N^2) 이 된다.1초에 1억번 연산할 수 있다는 제한사항이 주어진다면, 배열의 최대 길이는 10^8 (1억)의 제곱근 이므로 제한시간 1초에 해결할 수 있는 배열의 길이는 10^4, 즉 10,000 이다.  배열의 최대길이가 10,000 이 넘는다면 완전탐색을 위한 이중반복문은 시간초과로 실패이다!!!!!!!!!(1초 제한일 경우)참..

🧬[깊이우선탐색 알고리즘] 노가다로 알아보기

깊이우선탐색과 너비우선탐색은 그래프나 트리구조를 탐색하는 두 가지 기본적인 알고리즘 이다. (Ai 말씀)각각의 특징과 차이점을 잘 비교하여, 효율적으로 사용하면 일반 적인 탐색 방법보다 효율적으로 사용할 수 있을 것 같다.원래는 두 가지 방법을 다 알아보고 싶었는데, 잘 이해가 되지 않아 디버깅 모드로 노가다를 해서 하루에 하나씩 알아보기로 하자...... 깊이 우선 탐색 (Depth First Search)-깊이를 우선적으로 탐색한다는 이름처럼, 그래프나 트리구조의 자료형태가 있는 경우, 같은 레벨에 있는 노드(?) 들을 탐색하고 지나가는 것이 아니라, 하나의 노드에 연결된 마지막 까지 탐색하고 나온다음에, 그 옆에 있는 노드를 또 끝까지 검색하고 나오는 방법 같다고 생각했다. (너비 는 이 반대겠네)..

🧬 [유클리드 호제법]을 이용한 최대공약수 찾기

기본 원리유클리드 호제법의 기본 아이디어는 다음과 같다.두 정수 ( a )와 ( b )가 있을 때, ( a )를 ( b )로 나눈 나머지를 ( r )이라고 할 때,( a )와 ( b )의 최대공약수는 ( b )와 ( r )의 최대공약수와 같다. 즉, 다음과 같은 관계가 성립...!GCD(𝑎,𝑏)=GCD(𝑏,𝑟) 이 과정을 반복하여 나머지가 0이 될 때까지 진행하다가 나머지가 0이 되는 순간, 그때의 ( b )가 ( a )와 ( b )의 최대공약수이다.알고리즘 단계두 수 ( a )와 ( b )를 입력받는다고 가정.나머지 ( r )을 계산: ( r =  a%b )( b )가 0이 아니면, ( a )를 ( b )로, ( b )를 ( r )로 업데이트.2번과 3번을 반복.( b )가 0이 되면, 그때의 ..