[백준/튼튼한기본기] 1978번: 소수 찾기
2022. 9. 13. 00:11
컴퓨터/코딩테스트
[문제] [내 코드] _ = input() temp = [int(i) for i in input().split()] print(len([t for t in temp if len([i for i in range(1, t+1) if t%i == 0])==2])) 약수의 개수가 두 개인 숫자의 갯수를 구하는 방식을 썼다 - 하지만 약수의 개수를 모두 구하는 대신에, 다른 수로 나누어지는 수를 먼저 탈락시키는 방법을 쓰면 조금 더 빠르지 않을까.. [개선안] _ = int(input()) temp = [int(i) for i in input().split()] cnt=0 for t in temp: for i in range(2, t+1): if t%i==0: if t == i: cnt += 1 break pri..
[백준/튼튼한기본기] 2693번: N번째 큰 수
2022. 9. 12. 23:51
컴퓨터/코딩테스트
[문제] [내 코드] for _ in range(int(input())): arr = [int(i) for i in input().split()] print(sorted(arr)[-3])
[백준/튼튼한기본기] 2609번: 최대공약수와 최대공배수
2022. 9. 12. 01:53
컴퓨터/코딩테스트
[문제] [내 코드] - 버전1: 주어진 숫자마다 약수 리스트를 만들었다 - 76ms 걸렸다 - 리스트 만드는 습관을 버리고자.. 다른 방법을 모색해봄 a, b = map(int, input().split()) a_list = [i for i in range(1, a+1) if a%i == 0] b_list = [j for j in range(1, b+1) if b%j == 0] r1 = max(list(set(a_list)&set(b_list))) print(r1) r2 = r1 * (a//r1) * (b//r1) print(r2) - 버전2: 주어진 숫자 중에서 작은 수를 기준으로 높은 수부터 약수를 구했다 (ex. 24면 24, 23, 22, 21, .. 로 for loop에서 나눔) - 살짝 줄어..
[백준/튼튼한기본기] 2309번: 일곱 난쟁이
2022. 9. 11. 22:49
컴퓨터/코딩테스트
[문제] [내 코드] - 버전1 (39184KB, 92ms) import random heights = [int(input()) for _ in range(9)] while True: sampled = random.sample(heights, 7) if sum(sampled)==100: for s in sorted(sampled): print(s) break - 버전2 (30840KB, 68ms) def foo(heights): diff = sum(heights) - 100 for i in range(len(heights)): first = heights[i] for j in heights[i+1:]: second = j if diff == (first+second): heights.remove(fir..
[백준/튼튼한기본기] 10870번: 피보나치수 5
2022. 9. 11. 21:55
컴퓨터/코딩테스트
[문제] [내 코드] a = int(input()) fn1 = 1 fn2 = 0 if a == 0: fn = fn2 elif a == 1: fn = fn1 else: for _ in range(a-1): fn = fn1 + fn2 fn2 = fn1 fn1 = fn print(fn) - 처음에 fn2 = fn1 앞에 fn1 = fn 을 써서 계속 오류가 났다.. 이런 말도 안 되는 실수를..!!!! - 분명히 더 깔끔한 방법이 있을 것 같은데, ... - n이 2보다 작을 때는 어차피 fn = n 인데.. 왜 복잡하게 if문을 썼을까나. - 머리가 터지는 줄 알았다. 살짝 자괴감 듦.;; [개선안] 다른 코드를 보니까 내 코드가 얼마나 웃긴 건지 알겠다. 하하 ... - 재귀함수 def fibo(n): i..
[백준/튼튼한기본기] 2460번: 지능형 기차 2
2022. 9. 11. 21:06
컴퓨터/코딩테스트
[문제] [내 코드] a, b = map(int, input().split()) max_people = people = b for _ in range(9): a, b = map(int, input().split()) people -= a people += b if max_people < people: max_people = people print(max_people) - 첫번째 역에 어차피 내리는 사람이 0이니까.. 굳이 for문 앞에 빼줄 필요는 없었다 - 그리고 파이썬 내장함수 max 를 써서 if문을 한 개라도 줄일 수 있고 - 내리는 사람과 타는 사람의 차이로 바로 더해도 되겠다 [개선안] m_ppl = ppl = 0 for _ in range(10): off, on = map(int, input..
[백준/튼튼한기본기] 10818번: 최소, 최대
2022. 9. 10. 00:22
컴퓨터/코딩테스트
[문제] [내 코드] t = int(input()) t_list = [int(i) for i in input().split(' ')] print(min(t_list), max(t_list)) - 149432KB, 452ms - 파이썬 내장기능 써서 어렵지 않았다.. 하지만 내장함수를 쓰지 않는다면? t = int(input()) t_list = [int(i) for i in input().split(' ')] mini = maxi = t_list[0] for i in t_list[1:]: if i maxi: maxi = i print(mini, maxi) - 시간이 조금 더 걸렸다(544ms)
[백준/튼튼한기본기] 3460번: 이진수구하기
2022. 9. 10. 00:08
컴퓨터/코딩테스트
[문제] [내 코드] for t in range(int(input())): n = int(input()) bi = bin(n)[2:][::-1] for i, b in enumerate(bi): if b == '1': print(i, end=' ') - 30840KB, 68ms - "최하위 비트(least significant bit, lsb)의 위치는 0이다." 라는 부분을 이해하지 못해서 실수를 했다; bin으로 변환한 이진수를 거꾸로 해줘야 됐던 것이다. - [::-1] 를 붙여 string을 reverse했다. 컴퓨팅에서 최하위 비트(least significant bit, LSB)는 이진 정수에서 짝수인지 홀수인지를 결정하는 단위값이 되는 비트 위치 이다. 최하위 비트는 가장 적은 숫자를 오른쪽에..