목록 code review/study (31)
KEEP GOING

[1] 로봇 청소기 https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어 www.acmicpc.net [BFS + 시물레이션] 이 문제는 deq에서 결국 하나의 좌표만 관리되기 때문에 굳이 BFS로 풀지 않고 좌표로만 접근해도 됐다. 보통 현재 좌표에서 네 가지 방향 모두 사용했는지 체크하는 변수를 두거나 for문으로 4가지 방향을 돌려서 검사하는 방식으로 구현하는데, 나는 전자의 방식을 사용했는데 (네 가지 방향 모두 사용했는지 체크하는 변수 : turn_time) for문..
https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr [BFS + 3차원 배열] 방향에 따라 건설비용을 따로 저장할 수 있도록 visited..

https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 양수 배열과 음수 배열을 따로 두어 양수는 오름차순, 음수는 내림차순으로 정렬한 뒤 그리디하게 접근했다. 숫자 두개씩 묶어 곱할 때, 큰 수를 만들기 위한 Best case는 1. 양수(1이 아님) * 양수(1이 아님) 2. 음수 * 음수 3. 음수 * 0 n = int(input()) answer = 0 zeroCount = 0 pos, neg = [], [] for _ in range(n):..

https://www.acmicpc.net/problem/2457 2457번: 공주님의 정원 첫째 줄에는 꽃들의 총 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 각 꽃이 피는 날짜와 지는 날짜가 주어진다. 하나의 날짜는 월과 일을 나타내는 두 숫자로 표현된다. 예를 들어서, www.acmicpc.net [그리디] - 월에 100을 곱하고 일을 더해서 날짜 형식을 변환하는 방식 참고 - 또 다른 접근법 from datetime import date date(2022, 3, 1).toordinal() # 738215 -> 1년 1월 1일을 기준으로 전체 일수 계산 date(1,1,1).toordinal() # 1 periods = [] answer = 0 n = int(input..

https://www.acmicpc.net/problem/1339 1339번: 단어 수학 첫째 줄에 단어의 개수 N(1 ≤ N ≤ 10)이 주어진다. 둘째 줄부터 N개의 줄에 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 대문자로만 이루어져있다. 모든 단어에 포함되어 있는 알파벳은 최대 www.acmicpc.net [성공한 코드 Greedy] 알파벳의 각 자리수 별로 가중치를 두어 dic에 저장 ex) ABCD => dic = {'A':1000, 'B':100, 'C':10, 'D':1} from collections import defaultdict N = int(input()) strings = [] answer = 0 number = 9 dic = defaultdict(int) for _ in r..
https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 1. 블로그 참고 from collections import deque n = int(input()) board = [list(map(int, input().split())) for _ in range(n)] answer, q = 0, deque() def get(i, j): # 0이 아닌 값이라면 if board[i][j]: q.append(board[i][j]) #..

https://programmers.co.kr/learn/courses/30/lessons/17677 코딩테스트 연습 - [1차] 뉴스 클러스터링 뉴스 클러스터링 여러 언론사에서 쏟아지는 뉴스, 특히 속보성 뉴스를 보면 비슷비슷한 제목의 기사가 많아 정작 필요한 기사를 찾기가 어렵다. Daum 뉴스의 개발 업무를 맡게 된 신입사원 튜브 programmers.co.kr [math 모듈 trunc, dic.values() 사용] 이번에 소수점 '버림' 문제를 처음봐서 trunc 함수에 대해 알게 되었다. from collections import defaultdict from math import trunc def solution(str1, str2): s1_dic, s2_dic = defaultdict(i..

https://www.acmicpc.net/problem/1976 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net [union-find 알고리즘을 이용한 풀이] def union(Parent, a, b): a = find(Parent, a) b = find(Parent, b) if a < b: Parent[b] = a else: Parent[a] = b def find(Parent, x): if Parent[x] != x: return find(Parent, Parent[x]) return x n = int(..