Algorithm/Problem Solving 155

[프로그래머스/Programmers] 가장 큰 정사각형 찾기

가장 큰 정사각형 찾기 📝문제 👨‍💻코드 def solution(board): for i in range(1, len(board)): for j in range(1, len(board[0])): if board[i][j] >= 1: board[i][j] = min(board[i - 1][j], board[i][j - 1], board[i - 1][j - 1]) + 1 answer = max(map(max, board)) ** 2 return answer 🤔Review 처음엔 3중 for문으로 정사각형을 하나하나 찾는 방법으로 문제를 풀었더니 시간초과가 발생했다. 방법을 찾아보다가 DP로 문제를 해결하였다.

[프로그래머스/Programmers] 큰 수 만들기

큰 수 만들기 📝문제 👨‍💻코드 def solution(number, k): stack = [number[0]] for i in range(1, len(number)): while stack and number[i] > stack[-1] and k > 0: stack.pop() k -= 1 stack.append(number[i]) if k > 0: for i in range(k): stack.pop() return ''.join(stack) 🤔Review stack을 이용해서 문제를 풀었다. 전형적인 그리디 문제이다. stack에 들어갈 수가 기존에 있던 스택에 있는 수 보다 크면 스택에 있는 수를 삭제해주는 방식으로 문제를 풀었다. 근데 문제가 처음엔 for반복문을 통해 조건을 주고 문제를 풀었더니 ..

[프로그래머스/Programmers] 게임 맵 최단거리

게임 맵 최단거리 📝문제 👨‍💻코드 from collections import deque def solution(maps): dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] queue = deque() queue.append((0, 0)) graph = [[-1 for _ in range(len(maps[0]))] for _ in range(len(maps))] graph[0][0] = 1 while queue: x, y = queue.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if nx >= len(maps) or nx = len(maps[0]) or ny < 0: continue else: if ma..

[프로그래머스/Programmers] 짝지어 제거하기

짝지어 제거하기 📝문제 👨‍💻코드 def solution(s): stack = [] for i in s: if stack: if i == stack[-1]: stack.pop() else: stack.append(i) else: stack.aasppend(i) if stack: answer = 0 else: answer = 1 return answer 🤔Review 처음엔 슬라이싱하여 del로 문제를 풀었더니 시간초과가 났다 리스트의 크기가 1,000,000까지여서 그런것 같다. 그래서 방법을 생각하다 stack밖에 없어서 문제를 stack을 이용하여 풀었다.

[프로그래머스/Programmers] 오픈채팅방

오픈채팅방 📝문제 👨‍💻코드 def solution(record): answer = [] info = {} result = [] for i in range(len(record)): temp = record[i].split() if temp[0] == 'Enter': answer.append([temp[1], '님이 들어왔습니다.']) info[temp[1]] = temp[2] if temp[0] == 'Leave': answer.append([temp[1], '님이 나갔습니다.']) if temp[0] == 'Change': info[temp[1]] = temp[2] for i in range(len(answer)): answer[i][0] = info[answer[i][0]] for i in answe..

[프로그래머스/Programmers] 문자열 압축

문자열 압축 📝문제 👨‍💻코드 def solution(s): answer = [] if len(s) == 1: return 1 for i in range(1, (len(s) // 2) + 1): arr = "" temp = s[:i] cnt = 1 for j in range(i, len(s), i): if temp == s[j:j + i]: cnt += 1 else: if cnt != 1: arr = arr + str(cnt) + temp else: arr = arr + temp temp = s[j:j + i] cnt = 1 if cnt != 1: arr = arr + str(cnt) + temp else: arr = arr + temp answer.append(len(arr)) return min(an..

[프로그래머스/Programmers] 수박수박수박수박수박수?

수박수박수박수박수박수? 📝문제 👨‍💻코드 def solution(n): answer = '' if n % 2 == 0: for i in range(n // 2): answer += '수박' else: for i in range(n // 2): answer += '수박' answer += '수' return answer 🤔Review 간단한 문자열 문제이다. n이 짝수일 경우 '수박'을 반복해서 넣어주고, 홀수 일경우 반복해서 넣어준 뒤 마지막에 '수'를 넣어준다.