문제 요약 및 풀이 완전제곱수. 64의 제곱근 8, 8을 제곱하게 되면 다시 64가 된다. 내가 생각한 풀이다. 제곱근을 구하고 정수형으로 타입 변환을 해준후에 다시 제곱하면 완전제곱수가 될 것이라고 생각했다. M N i = M int(i**0.5) T = int(i**0.5)**2 i == T sqrt_list 60 100 60 7 49 False 61 7 49 False 62 7 49 False 63 7 49 False 64 8 64 True 64 .... ... ... .... .... 100 10 100 True 64, 81, 100 표와 같이 결과가 나온다. 나머지는 M이상 N이하의 자연수 중에 완전제곱수가 없을 때에는 -1을 출력, 아니면 첫째줄에 합과 둘째 줄에 최솟값을 출력해주면 된다. 완..
문제 요약 및 풀이 피시방 자리는 1번부터 100번까지 있다. 처음에는 모두 비어있고, 들어오는 손님은 자기가 앉고 싶은 자리에만 앉고 싶어 한다. 해당 자리에 사람이 있으면 거절당한다. 거절당한 사람 수 출력 표로 정리해보았다. sit : 자리 번호 (1 ~ 100) N : 손님의 수 customer : 손님이 앉고 싶은 자리 cnt : 거절 당한 사람 수(누적) 1 5 1 0 2 2 0 3 3 0 4 2 1 5 3 2 ... 이미 1, 2, 3번 자리에는 자리가 있으니... 나중에 들어온 4번째, 5번째 손님이 앉고 싶은 자리 2번, 3번을 못 앉게 된다. 그럼 출력 결과는 2가 나오게 된다. 아래의 코드를 보면 sit의 배열의 크기를 미리 101개를 만들어두었다. 자리는 1~100까지 있지만 배열의..
문제 요약 및 풀이 X, Y가 주어졌을 때, X, Y를 Reverse 시키고 합을 구한 후에 다시 Reverse를 시키면 된다. 처음에 문제를 제대로 읽지 않아... X, Y의 합을 구하고 Reverse를 시켰다. 틀려서 다시 대충 읽고 X, Y의 각각에 대해 Reverse를 시키고 합을 구했다. 또다시 틀려서 제대로 읽고 풀었다. 표로 작성을 해보면 아래와 같이 된다. X, Y를 입력받고 표의 오른쪽으로 진행이 된다고 볼 수 있다. X Y T = reverse(X) K = reverse(Y) T+K reverse(T+K) 123 100 321 1 322 223 그냥 간단하게 문자열의 슬라이싱과 리스트를 이용하여 돌렸다. 슬라이싱을 통해 reverse를 구현하였다. 완성된 코드!! 👍😊 s = input..
문제 요약 및 풀이 N개의 채팅 기록 중에 정답자 S의 채팅 내용과 같은 채팅 내용들을 찾으면 된다. 내가 생각한 풀이는 이렇다. 1. 딕셔너리를 만들어서 dict[name] = chat 로 한 쌍을 이루어서 저장 2. 해당 dict[S]를 정답 answer에 대입하여 for문을 돌려 answer와 같은 채팅 내용을 가진 사람들을 카운팅 3. dict[S]가 아닌 사람들을 카운팅 해야 되기 때문에 if문으로 break 예제 입력 1을 예로 들면 N = 3, S = duck일 때 N name chat answer cnt 출력 1 oridya hello 2 orihehe hi hi 1 1 3 duck hi hi 2 표 이해가 안될 수도 있을 텐데... 그 부분은 풀이 1, 2, 3을 참조하면 될 것 같다. ..
문제 요약 및 풀이 정수 N -> 13을 입력받아서 2진수로 바꾼 후 2진수를 뒤집어서 그거를 다시 정수로 만들면 된다. 예제 입력 1을 예로 보여주자면 N 2진수로 변환 2진수 reverse 바뀐 N 13 1101 1011 11 위의 표처럼 출력이 나오게 된다. 정수로 입력을 받는데 이진수로 받고, 0b~~~ 이런 식으로 나온 이진수의 앞의 '0b'를 제거해서 숫자만 나오도록 한다. 제거한 숫자(문자열)을 reverse로 순서를 뒤집어주고 0b를 다시 붙여준 후에 10진수로 만들어주면 된다. 아래와 같은 코드로 마무리 짓겠다. 완성된 코드!! 👍😊 s_N = bin(int(input())).replace("0b", "") arr_list = '0b'+''.join(list(reversed(s_N))) ..
해당 문제는 1929번의 소수 구하기 문제와 유사하므로 풀이 과정은 생략하겠다. [python] 백준 1929번 소수 구하기 문제 요약 및 풀이 M이상 N이하의 소수를 모두 출력 이 문제 같은 경우 1부터 ~ 1,000,000까지 소수인지 아닌지 일일이 검사한다면 시간 초과가 걸리게 될 것이다. 그렇기에 에라토스테네스의 체라 begin-dev-awos.tistory.com 코드!!👌👌 n = 123456*2 # 0, 1 = False, 소수는 2부터 시작이므로 True 로 설정 a = [False, False] + [True] * (n - 1) primes = [] for i in range(2, n + 1): if a[i]: primes.append(i) for j in range(2 * i, n + ..
문제 요약 및 풀이 M이상 N이하의 소수를 모두 출력 이 문제 같은 경우 1부터 ~ 1,000,000까지 소수인지 아닌지 일일이 검사한다면 시간 초과가 걸리게 될 것이다. 그렇기에 에라토스테네스의 체라는 알고리즘을 쓸 예정이다. 밑의 gif 파일을 보자. 이 gif 파일을 보면 2부터 120사이의 소수를 구하는데 2의 배수, 3의 배수... N의 배수를 검사하는 것을 볼 수 있다. 해당 배수들을 제거하게 되면 소수를 찾을 수 있다. '에라토스테네스의 체'의 시간복잡도는 O(Nlog(logN))이다. 일단 M과 N의 제한은 (1 ≤ M ≤ N ≤ 1,000,000) 이기 때문에 1부터 1,000,000까지의 소수를 미리 구해놓고 M과 N사이의 소수를 반환시켜줄 것이다. N의 배수를 제거해야 되기 때문에 b..
문제 요약 및 풀이 어떤 자연수(K)를 N으로 나누었을 때 나머지와 몫이 같은 자연수의 합을 구해라. K % 3이라면 몫이 1이고 -- 나머지가 1인 4와, 몫이 2이고 -- 나머지가 2인 8이 나올 것이다. 두 자연수의 합은 12가 된다. 잘 이해가 안 되면 아래의 표로 설명하겠다. K % N 몫 나머지 K K의 배수 K % 2 1 1 3 3 K % 3 1 1 4 4 2 2 8 K % 4 1 1 5 5 2 2 10 3 3 15 K % 5 1 1 6 6 2 2 12 3 3 18 4 4 24 K % 6 1 1 7 7 2 2 14 3 3 21 4 4 28 5 5 35 위의 표처럼 나타내면 규칙이 보인다. 몫과 나머지는 1부터 N-1까지이고 K를 N으로 나누었을 때 K는 N+1의 배수인걸 알 수 있다. N이 ..
문제 요약 및 풀이 입력이 7 3일 때 (1 2 3 4 5 6 7) 번까지 총 7명의 사람이 원을 이루고 있게 되고 3번째 사람을 제거하게 되는데 표로 보여주겠다. 리스트를 이용해서 풀면 되겠다 싶었다. 배열의 index값은 0번째부터 시작이니 k=3이라면 list[2]라고 생각하면 된다. K번째 사람이 제거 될때마다 리스트의 사이즈가 하나씩 줄어드는 걸 볼 수 있다. 1 2 3 4 5 6 7 [0] [1] [2] [3] [4] [5] [6] 3 1 2 4 5 6 7 [0] [1] [2] [3] [4] [5] 6 1 2 4 5 7 [0] [1] [2] [3] [4] 2 1 4 5 7 [0] [1] [2] [3] 7 1 4 5 [0] [1] [2] 5 1 4 [0] [1] 1 4 [0] 4 빨간색만을 보면..
문제 요약 및 풀이 8진수를 2진수로 변환하여 출력 8진수를 10진수로 바꾸어 2진수로 변환하면 되겠다 싶어 아래와 같이 구현 입력을 받을 때 8진수로 입력받아 10진수로 변환하도록 하였다. int(input(), 8) bin메서드를 이용하면 10진수를 2진수로 변환하게 되는데 '0b'가 앞에 붙게돼서 슬라이싱을 통해 해당 문자열을 잘라 2진수 만을 출력토록 하였다. 완성된 코드!! 👍😊 octa_n = int(input(), 8) print(bin(octa_n)[2:])