본문 바로가기

etc.

[백준 2981번][C] 검문 (유클리드 호제법) 정답 비율.. 문제도 잘 읽어야 하고, 시간초과도 시도할 때마다 난다 브루트포스로 풀면 입력 값들 중에서 가장 작은 min 수를 가지고, 1까지 -1 하면서 모든 값의 최대공약수/공약수를 구하면 된다 당연히 시간초과가 난다 이는 다음과 같은 수학적인 식 도출을 생각해야 한다 예를 들어 A, B, C 값이 입력되었다고 하자. A = aM + r / B = bM + r / C = bM + r 식이 성립할 것이다 (M은 나머지가 모두 같게 되는 수의 집합) 이는 다음과 같다 |A-B| = (a-b)M / |B-C| = (b-c)M gcd(|A-B|, |B-C|) == M 따라서, arr[1]-arr[0], ..., arr[N]-arr[N-1] 값들의 공약수를 구하면, 답이 도출된다 gcd() 함수의 코드는 유.. 더보기
[Python] 입력 받기 (input(), sys.stdin.readline()) 1. input() 가장 기본적인 입력 방식으로, 문자열을 입력받게 된다 숫자로 입력을 받고싶다면 다음과 같이 int형 변환을 해주어야 한다 str = input() num = int(input()) input() 함수는 기본적으로 한 줄 단위로 입력을 받기 때문에 공백을 단위로, 쉼표를 단위로 나누고 싶을 때에는 다음과 같이 split() 함수를 이용한다 str = input().split() # 공백 단위 str_list = input().split(",") # 쉼표 단위 split() 함수는 리스트로 저장을 하게 된다 이를 독립적으로 변수에 저장하고 싶다면, 다음과 같이 map() 함수를 이용한다 str1, str2 = map( input().split() ) num1, num2 = map( int.. 더보기
[Python] 소인수 분해 (** 연산자, // 연산자) 소인수 분해는 한 합성수를 소수들의 곱으로 표현하는 방법을 말한다 가장 간단한 방법은 2부터 시작해 n의 소인수가 될 수 있는 수들을 순회하면서, n의 약수를 찾을 때마다 나누는 방법이 있다 n이 소수인 경우 √n번 반복문을 돌기 때문에 시간 복잡도는 O(√n)이 된다 이 범위의 소수들을 미리 찾아둔다면, 훨씬 빨라지는 최적화 방법이 될 것이다 코드는 다음과 같다 N = int(input()) for i in range(2, int(N ** 0.5) + 1): #math.sqrt() 대신 **0 5 while(N > 1): if(N % i == 0): N //= i #정수형 나눗셈 print(i) else: break if(N > 1): print(N) 1. ** 연산자 제곱근 값을 구할 때, 다음과 같.. 더보기
CodeBlocks 간단한 팁 6가지 1. 파일 프로젝트 창이 사라졌을 때 복원 View -> Manager (Shift + F2) 2. 편집창 아래 메시지 창이 사라졌을 때 복원 View -> Logs (F2) 3. 명령행 인수(command-line argument) 설정 Project -> Set programs' arguments... 4. 들여쓰기를 새로 맞추고 싶을 때(re-indent) 들여쓰기를 새로 맞출 부분을 선택하고 마우스 우클릭 -> Format use AStyle 5. 변수나 함수의 이름 일괄 변경 (이름 변경 리팩토링: refactoring rename) 바꿀 이름 위에서 마우스 우클릭 -> Code Refactoring -> Rename symbols 전역 변수나 함수의 경우 파일을 선택하라는 메시지 박스가 나오면.. 더보기
[점프 투 파이썬 6장 연습 문제] 문자열 압축하기 / Duplicate Numbers / 모스 부호 해독 1. 문자열 압축하기 input ) aaabbcccccca output ) a3b2c6a1 반복문을 이용하여 문자를 하나씩 탐색하며 기준 문자를 설정한다 기준 문자와 다른 경우에는 기준 문자를 업데이트 시킨 후, cnt 값을 1로 초기화 한다 기준 문자와 같은 경우에는 cnt 값을 +1 한다 코드는 다음과 같다 str = input() length = len(str) word = '' cnt = 1 for i in range(0, length): word = str[i] # for word in str 로 표현 가능 if(i+1 < length): if(word == str[i+1]): cnt += 1 else: print("%c%d" % (word, cnt), end="") # 문자열 포맷팅 cnt =.. 더보기