문제 17087번: 숨바꼭질 6 수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이� www.acmicpc.net 문제 풀이 최대 공약수를 구할 수 있다면 쉽게 풀 수 있는 문제이다. 나의 위치와 동생들의 위치 차이를 계산한뒤, 전체의 위치에서 최대 공약수를 찾아서 반환하면 문제의 정답이 된다. 최대 공약수를 구할 때 세 수의 최대 공약수를 구한다고 하면 a, b에 대한 최대 공약수를 구하고, 구해진 최대 공약수와 c의 최대 공약수를 구하면 a, b, c의 최대 공약수와 같아진다. 이 성질을 활용하여 코드를 구현하면 간단하게 문제를 풀 ..
문제 2004번: 조합 0의 개수 첫째 줄에 정수 n, m(0≤m≤n≤2,000,000,000, n!=0)이 들어온다. www.acmicpc.net 문제 풀이 이 문제는 조합의 성질을 이해할 수 있어야 풀 수 있는 문제이다. 조합은 nCm이므로 n! / m! (n - m)!으로 계산 된다. 이때 n!, m!, (n - m)!에 대해 각각 2, 5로 나누어지는지 확인하고 카운트하면 된다. 그럼 실제 계산을 위해 n! 값들 중에 2, 5의 배수를 찾아야 할까? 아니다. 만약 9인 경우 2의 배수는 2 4 6 8로 4개가 되며, 5의 배수는 5 1개이므로 9 // 2, 9 // 5로 9!에 대한 각 배수들을 찾을 수 있다. 코드 def cnt(n, divisor): ret = 0 while n != 0: n ..
문제 1676번: 팩토리얼 0의 개수 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제 풀이 팩토리얼로 계산된 값에서 뒤에서 부터 0이 아닌 최초의 다른 수가 발생하는지를 확인하고 반환하는 문제이다. 예를 들어 10!은 3628800이므로 뒤에서 0이 아닌 수는 2번째 이후에 등장한다. 간단하게 값이 입력되면 이에 대한 팩토리얼을 계산하고, 문자로 변환하여 뒤집은 후에 0이 나오지 않을 때까지 카운트하였다. 코드 import math if __name__ == '__main__': f = str(math.factorial(int(input()))) cnt = 0 for num in f[::-1]: if num != '0':..
문제 6588번: 골드바흐의 추측 문제 1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다. 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다. www.acmicpc.net 문제 풀이 4 보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있는것이 크리스티안 골드바흐의 추측이다. 문제는 다음과 같은 순서에 따라 풀 수 있다. 최대 입력되는 수는 100000이므로, 최대 입력 수 까지의 소수를 미리 계산한다. 원래수 - 홀수인 소수 = 홀수 이므로, 가장 작은 홀수인 소수 부터 원래 수 - 홀수인 소수 모두 소수인지 판별하면 된다. 예를 들어 8인 경우 가장 작은 홀수인 소수인 3을 통해 계산한 값은, 5(8 - 3)이므..
문제 11655번: ROT13 첫째 줄에 알파벳 대문자, 소문자, 공백, 숫자로만 이루어진 문자열 S가 주어진다. S의 길이는 100을 넘지 않는다. www.acmicpc.net 문제 풀이 ROT13은 문자가 입력되면 소문자, 대문자를 구분하여 각 문자로 부터 13번째 이후의 알파벳으로 변경하는 암호화 방식이다. 해당 암호화 방식을 구현하면 문제를 해결 할 수 있다. 소문자와 대문자의 인덱스를 찾기 위한 딕셔너리를 초기화 한다. stirng 상수를 활용하면 좋다. 대문자는 ASCII코드 65 부터, 소문자는 97 부터 시작하므로 이를 활용하여 +13된 값을 찾는다. 코드 import string LOWER = {c: idx for idx, c in enumerate(string.ascii_lowercas..
문제 1935번: 후위 표기식2 첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이�� www.acmicpc.net 문제 풀이 후위 표기식을 계산하는 것은 후위 표기식을 만드는 것보다는 간단하다. 피연산자를 stack에 push 하고, 연산자가 입력되면 stack의 값 중 2개를 출력하여 연산을 하면 된다. 해당 문제에서는 A - Z와 같이 영어 대문자가 주어지고, 이에 매칭 되는 숫자들이 입력될 때 후위 표기식을 계산하는 문제이다. `string.ascii_uppercase`를 활용하여 A - Z에 대응되는 딕셔너리를 초기화 한다. `stirng.asci..
문제 1918번: 후위 표기식 첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식�� www.acmicpc.net 문제 풀이 stack을 활용하고, 연산식에 대한 특성을 잘 이해하면 쉽게 문제를 풀 수 있다. 피연산자와 연산자에 따라, stack에 push 할지가 결정되며 연산자의 우선순위와 괄호를 고려하여 처리하면 된다. 피연산자가 입력되면 stack에 push하지 않고 출력한다. 연산자는 stack에 push 한다. stack에 push 하고자 하는 연산자가 닫는 괄호 ' ) '라면 여는 괄호 ' ( '를 만날때 까지 stack에서 pop하여 출력한다...
개인적으로 사용하거나, 보안상의 위험이 없는 경우라면 sudo을 사용 할 때 패스워드를 입력하는 것은 다소 귀찮은 일이다. 이리 저리 검색해 보다가 sudo 사용시 패스워드 없이 사용할 수 있는 방법이 있었고 방법은 쉬웠으나 시행착오가 있었다. /etc/sudoers 수정 sudoer는 sudo 권한을 가지는 유저를 변경하거나, `sudo` 권한을 사용할 경우 패스워드 없이 사용할 수 있는 설정을 할 수 있다. 만약 root 비밀번호가 설정되지 않은 환경이라면 반드시 root 패스워드 부터 설정하고 진행하여야 한다. root 비밀번호를 설정하지 않고, sudoer에 잘못된 값을 기입하여 오류가 발생한다면.... 돌이킬 수 없다.🤣 Q : 왜 돌이킬 수 없다고 말하는 건가요? A : 직접 sudoer 파일..