본문 바로가기

프로그래밍/알고리즘128

백준 - 10162 전자레인지 파이썬 100점 해결 코드 (서버테스크라서 100점으로 뜸) t = int(input()) #10으로 나누어 떨어지지 않으면 if t % 10 != 0: #문제의 조건대로 10을 리턴 print(-1) else: a = b = c = 0 a = t//300 b = (t%300) // 60 c = (t%300) % 60 //10 print(a, b, c) 먼저, 시간을 t로 설정하고 10으로 나눴을 때 안 떨어지면 계산이 안되니 '-1'을 프린트한다 또, a, b, c를 각 0으로 초기화한 뒤 큰 수부터 나누고 그다음수는 큰 수의 나머지를 나누는 형식으로 진행한다 다른 분 코드 n = int(input()) if n %10 != 0: print(-1) else: for i in [300, 60, 10]: prin.. 2023. 1. 16.
프로그래머스 - 비밀지도 파이썬 해결 코드 def solution(n, arr1, arr2): result = [] for i in range(n): result.append(arr1[i] | arr2[i]) answer = [] for r in result: word = bin(r)[2:] word = word.replace("1", "#") word = word.replace("0", " ") # 앞에 0 붙여주기 while True: if len(word) == n: break word = " " + word answer.append(word) return answer 처음에 생각했던 아이디어 1. 이진수로 바꾼다 2.비트연산 중 OR연산자 돌리기 풀면서 실제로 했던 순서 1. 먼저 숫자를 더하기(배열에서 원래 더해야하는 것) 2.. 2023. 1. 13.
프로그래머스 - 최대공약수와 최소공배수 파이썬 + 독서 후기 문제 최소공배수, 최대공약수 문제는 꾸준히 나온다 해결 코드 #방법1 import math def solution(n, m): # 최대 공약수 구하기 for i in range(min(n, m), 0, -1): if (n % i == 0) and (m % i == 0): a = i break # 최소 공배수 구하기 for j in range(max(n, m), (n * m) + 1): if j % n == 0 and j % m == 0: b = j break return [a, b] #방법2 def solution(n, m): # 최대 공약수 구하기 gcd = lambda a,b : b if not a%b else gcd(b, a%b) #최소 공배수 구하기 lcm = lambda a,b : a*b//gc.. 2023. 1. 11.
프로그래머스 - 직사각형 별찍기 파이썬 + 독서후기 문제 코드 a, b = map(int, input().strip().split(' ')) print(('*'*a + '\n')*b) #다른 풀이 1 a, b = map(int, input().strip().split(' ')) for _ in range(b): print('*'*a) # 다른 풀이 2 a, b = map(int, input().strip().split(' ')) for i in range(b): for j in range(a): print('*', end='') print() map() 쓰는 이유 #input().split()인 경우 >>> a = input().split() 10 20 (입력) >>> a ['10', '20'] #map(int, input().split())인 경우 >>.. 2023. 1. 10.
백준 - 영화감독 숌 1436 파이썬 문제 코드 N = int(input()) title = 666 #완전탐색은 while True를 많이 씀 while N: if "666" in str(title): N -= 1 title += 1 print(title - 1) 브루트포스(완전탐색) : 하나하나씩 찾으려고 할땐 횟수를 구할땐 while True를 많이 사용하며 간단하게 'while n'으로도 가능하다 2023. 1. 9.
브루트포스 알고리즘 정의 brute: 짐승같은, 난폭한 force: 힘 조합 가능한 모든 문자열을 하나씩 대입해보는 방식으로 암호를 해독하는 방법, 완전 탐색이라고도 함 장점 100% 정답을 찾을 수 있음 병력작업이 가능 단점 실행시간이 오래 걸림 메모리 효율측면에서 비효율적 예시문제 문제 셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다. 양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다. 예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 .. 2023. 1. 6.
프로그래머스 - 부족한 금액 계산하기 파이썬 문제 나의 풀이 #함수 만들고 사용할 파라미터 할당 def solution(price, money, count): #사용할 변수 초기화 pay = 0 #1부터 count까지의 범위에서 반복문 실행 for i in range(1, count+1): #pay에 티켓값에 탄 횟수를 더한 값을 더해줌 pay += (price*i) #만약 돈이 모자르면 if money 2023. 1. 5.
프로그래머스 - 문자열 다루기 기본 파이썬 문제 처음 풀이(틀림) def solution(s): if (len(s) == 4 or 6) and s.isdigit(): return True else: return False 틀린 이유는 len(s)==4까지는 문자열의 길이가 4인지 판별하지만, 'or 6'부분은 무조건 True가 나오기 때문에 틀린다 성공한 풀이 def solution(s): if (len(s) == 4 or len(s) == 6) and s.isdigit(): return True else: return False 두 번째 줄처럼 len(s) == 4 or len(s) == 6이라고 따로 명시를 해주어야 문자열 길이의 비교가 된다 다른 간결한 풀이 #1 def solution(s): return s.isdigit() and len.. 2023. 1. 4.
프로그래머스 - 수박수박수박수박수박수? 파이썬 문제 코드 #1st def solution(n): return ('수박'*n)[:n] #2st def solution(n): s = '수박' * n return s[:n] #3st def solution(n): return "수박"*(n//2) + "수"*(n%2) #4st def solution(n): answer = '' for i in range(1, n+1): if i % 2 == 0: answer += '박' else: answer += '수' return answer 만약 n 이 3이라면 3으로 생각할 것이 아니라, 1,2,3으로 인식해서 문제를 풀이하면 반복문을 사용해서 하나하나씩 넣는 것을 생각하면 편하다! 2023. 1. 2.