Algorithm/Problem Solving 155

[프로그래머스/Programmers] 올바른 괄호

올바른 괄호 📝문제 👨‍💻코드 def solution(s): answer = True stack = [] arr = list(s) if arr[0] == ')': return False else: for i in range(len(arr)): stack.append(arr[i]) if len(stack) > 1: if stack[-1] == ')': if stack[-2] == '(': stack.pop() stack.pop() if stack: answer = False else: answer = True return answer 🤔Review 스택을 이용해 문제를 풀었다. 맨 앞에 )이 올 경우는 절대 괄호들이 전부 없어질 수 없으므로 False를 return 했고, 나머지 경우는 방금 들어온 괄호값..

[프로그래머스/Programmers] 숫자의 표현

숫자의 표현 📝문제 👨‍💻코드 def solution(n): answer = 0 for i in range(1, n + 1): sumOfNum = 0 for j in range(i, n + 1): sumOfNum += j if sumOfNum == n: answer += 1 break if sumOfNum > n: break return answer 🤔Review 1부터 증가하면서 더해준다. 만약 연속해서 더한 값이 n이면 answer을 1증가해주고 n보다 커지면 반복문을 나온다. 그 다음 다시 2부터 시작하면서 반복한다.

[프로그래머스/Programmers] 다음 큰 숫자

다음 큰 숫자 📝문제 👨‍💻코드 def solution(n): answer = 0 arr = list(format(n, 'b')) cnt = arr.count("1") for i in range(n + 1, 1000001): arr2 = list(format(i, 'b')) cnt2 = arr2.count("1") if cnt2 == cnt: answer = i break return answer 🤔Review n + 1부터 1000001까지 탐색을 하는데 만족하는 수 중 가장 작은 수 이기때문에 만족하면 바로 break를 걸어주면 시간초과가 발생하지 않는다.

[프로그래머스/Programmers] 땅따먹기

땅따먹기 📝문제 👨‍💻코드 def solution(land): for i in range(1, len(land)): for j in range(len(land[0])): land[i][j] += max(land[i - 1][:j] + land[i - 1][j + 1:]) return max(land[-1]) 🤔Review 처음엔 DP로 풀려고 했으나 첫번째에 어떤 수를 넣어야할지 몰라서 방법을 고민하다가 각 자리에 i - 1열에 j를 제외한 배열을 만들어 max값을 더해주는 방식을 사용했다. 백준에 RGB거리와 비슷한 문제인듯 하다.

[프로그래머스/Programmers] [1차] 뉴스 클러스터링

[1차] 뉴스 클러스터링 📝문제 👨‍💻코드 def solution(str1, str2): answer = 0 arr1 = [] arr2 = [] for i in range(len(str1) - 1): a = str1[i:i + 2] if a.isalpha() == True: arr1.append(a.lower()) for i in range(len(str2) - 1): a = str2[i:i + 2] if a.isalpha() == True: arr2.append(a.lower()) set1 = set(arr1) set2 = set(arr2) gyo = set1 & set2 hap = set1 | set2 a = sum([min(arr1.count(i), arr2.count(i)) for i in gyo..

[프로그래머스/Programmers] 예상 대진표

예상 대진표 📝문제 👨‍💻코드 import math def solution(n,a,b): answer = 0 cnt = 0 for i in range(n // 2): a = math.ceil(a / 2) b = math.ceil(b / 2) cnt += 1 if a == b: answer = cnt break return answer 🤔Review 예를 들어 3, 4번이 다음 대진을 받으면 무조건 2이다. 그러려면 3, 4를 2로 나누고 올림 해주면 된다. 이렇게 진행하고 마지막으로 a와 b가 게임을 하면 반복문을 종료하고 cnt를 return한다.