본문 바로가기

Algorithm245

[프로그래머스] Lv2 - 멀쩡한 사각형 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/62048 코딩테스트 연습 - 멀쩡한 사각형 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 programmers.co.kr import math def solution(w, h): return w*h-(w+h-math.gcd(w, h)) 풀이 1. 전체 사각형 개수(w*h)에서 (w+h-최대공약수)를 리턴 대각 선을 이은 선분이 지나는 사각형들을 위쪽과 오른쪽 끝으로 옮기면 개수가 'w+h-최대공약수'이 된다. 최대 공약수만큼 사각형이 겹치게 되므로 w+h.. 2022. 3. 29.
[프로그래머스] Lv2 - 문자열 압축 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문 programmers.co.kr import sys def solution(s): if len(s) == 1: return 1 answer = sys.maxsize for i in range(1, len(s)//2+1): arr = s[:i] res = press(s, i, arr) answer = min(answer, len(res)) return answer def press(s, .. 2022. 3. 29.
[백준] 1253번 - 좋다 (파이썬) # 좋다 import sys input = sys.stdin.readline N = int(input()) arr = list(map(int, input().split())) arr.sort() result = 0 for i, num in enumerate(arr): temp = arr[:i]+arr[i+1:] left, right = 0, len(temp)-1 while left num: right -= 1 elif temp[left]+temp[right] < num: left += 1 else: result += 1 break print(result) 투포인터 1. 입력을 받고 정렬을 해준다. 2. arr의 각 수 num마다 num을 .. 2022. 3. 29.
[백준] 16434번 - 드래곤 앤 던전 (파이썬) # 드래곤 앤 던전 N, A = map(int, input().split()) arr = [] for _ in range(N): type, atk, hp = map(int, input().split()) arr.append((type, atk, hp)) def can_clear(curATK, maxHP): curHP = maxHP # 모든 방 탐색 for type, atk, hp in arr: # 몬스터 if type == 1: turn = hp//curATK if not hp % curATK else hp//curATK+1 # 용사가 먼저 공격하므로 -1 curHP -= atk * (turn-1) # 물약 else: curATK += atk curHP += hp # 최대 회복은 maxHP까지만 if c.. 2022. 3. 28.
[프로그래머스] Lv1 - 직사각형 별찍기 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/12969 코딩테스트 연습 - 직사각형 별찍기 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수 programmers.co.kr a, b = map(int, input().strip().split(' ')) print(('*'*a + '\n')*b) 풀이 1. a만큼 *을 만들고 '\n'을 추가 2. 위 과정을 b번 반복 3. 출력 2022. 3. 27.
[프로그래머스] Lv1 - x만큼 간격이 있는 n개의 숫자 (파이썬) https://programmers.co.kr/learn/courses/30/lessons/12954 코딩테스트 연습 - x만큼 간격이 있는 n개의 숫자 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. programmers.co.kr def solution(x, n): answer = [x for _ in range(n)] if x != 0: answer = [i for i in range( x, x*n+1, x)] if x > 0 else [i for i in range(x, x*n-1, x)] return answer 풀이 1. answ.. 2022. 3. 27.
[백준] 2022번 - 사다리 (파이썬) # 사다리 from math import sqrt x, y, c = map(float, input().split()) start, end = 0, min(x, y) def get_c(mid): a = sqrt(x**2-mid**2) b = sqrt(y**2-mid**2) return a*b/(a+b) result = 0 while end-start > 1e-6: mid = (start+end)/2 if get_c(mid) >= c: result = mid start = mid else: end = mid print("{}".format(round(result, 4))) 이분탐색 1. end를 둘 중 작은 값으로 설정 2. 이분탐색 - end-start가 1e-6(10^-6)보다 클 때까지 반복 (오차가 .. 2022. 3. 27.