목록Algorithm (26)
-
문제 https://www.acmicpc.net/problem/1756 1756번: 피자 굽기 첫째 줄에 오븐의 깊이 D와 피자 반죽의 개수 N이 공백을 사이에 두고 주어진다. (1 ≤ D, N ≤ 300,000) 둘째 줄에는 오븐의 최상단부터 시작하여 깊이에 따른 오븐의 지름이 차례대로 주어진다. 셋 www.acmicpc.net 풀이 방법 오븐이 현재 5 6 4 3 6 2 3 처럼 되어있으므로 어차피 지름이 3인 반죽은 맨 밑바닥까지 가지 못하고 그 위에 지름이 2인 오븐에서 막힌다. 따라서 이를 비교하기 쉽도록 바꿔줘야한다. 5 6 4 3 6 2 3 → 5 5 4 3 3 2 2 로 바꿔주는 작업이 필요하다. 그 후에는 가장 밑바닥 오븐부터 차례대로 올라오며 피자 반죽의 지름과 비교한다. 코드 d, n..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/276034 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 SKILL_CODE 가 Python 이나 C#을 나타내는 비트를 포함하는 개발자를 찾아야한다. 즉, 해당 기술을 나타내는 비트가 1로 설정되어있는지 확인해야하므로, 비트를 비교하는 연산을 해야한다. '&' 연산자를 사용하면, 10진수 숫자들은 자동으로 2진수로 변환된 후 비트별로 AND 연산이 수행된다. 따라서 SKILL_CODE와 'Python' 에 해당하는 2진수 비트를 비교..
문제 https://www.acmicpc.net/problem/2852 2852번: NBA 농구 첫째 줄에 골이 들어간 횟수 N(1 0: one = one - (48*60 - (60*m+s)) print('{:0>2}:{:0>2}'.format(one//60,one%60)) print('{:0>2}:{:0>2}'.format(two//60,two%60))
문제 https://www.acmicpc.net/problem/16173 16173번: 점프왕 쩰리 (Small) 쩰리는 맨 왼쪽 위의 칸에서 출발해 (행, 열)로 나타낸 좌표계로, (1, 1) -> (2, 1) -> (3, 1) -> (3, 3)으로 이동해 게임에서 승리할 수 있다. www.acmicpc.net 풀이 방법 시작 지점인 (0, 0)부터 시작하여 dfs로 돌면서 방문한 곳은 visited 배열에서 1로 바꿔준다. 좌표가 맵 밖을 벗어나거나 이미 방문한 곳은 return으로 빠져나온다. 도착 지점에 도착했으면 (= visited 배열에서 도착 지점에 해당하는 곳이 1이면) 성공한 것으로 간주한다. 코드 n = int(input()) board = [list(map(int, input().sp..
문제 https://www.acmicpc.net/problem/2116 2116번: 주사위 쌓기 첫줄에는 주사위의 개수가 입력된다. 그 다음 줄부터는 한 줄에 하나씩 주사위의 종류가 1번 주사위부터 주사위 번호 순서대로 입력된다. 주사위의 종류는 각 면에 적혀진 숫자가 그림1에 있는 www.acmicpc.net 풀이 방법 주사위의 개수와 주사위 정보를 입력받는다. 가장 밑에 오는 주사위에서 밑면을 무엇으로 해야 최대가 되는지 계산하기 위해 for 문을 1 - 6까지 돈다. 밑에 있는 주사위의 윗면과, 위에 있는 주사위의 밑면이 일치해야하기 때문에 그 수를 맞춘 상태에서 옆면이 최대가 되는 숫자를 더해준다. for 문이 끝날 때마다 최대가 되는 옆면의 합을 갱신한다. 코드 n = int(input()) d..
문제 https://www.acmicpc.net/problem/16922 16922번: 로마 숫자 만들기 2, 6, 10, 11, 15, 20, 51, 55, 60, 100을 만들 수 있다. www.acmicpc.net 풀이 방법 로마숫자를 더해서 나오는 수에 해당하는 인덱스 (예를 들어 로마숫자 IX → 11) 에 1을 더해준다. 나중에 로마숫자로 만들 수 있는 숫자의 총 개수를 sum 함수로 쉽게 세기 위함이다. 재귀함수를 사용해서 숫자를 반복적으로 더해준다. 코드 n = int(input()) roma = [1, 5, 10, 50] arr = [0] * 1001 num = 0 def dfs(cur, start): global num if cur == n: arr[num] = 1 return for ..
문제 https://www.acmicpc.net/problem/14890 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 방법 지나갈 수 있는 길인지 체크할 때, 높이가 같은 경우 : 그냥 넘어감 높이가 2 이상 차이 나는 경우 : False 반환 왼쪽이 더 높은 경우 : 경사로를 놓을 공간이 있는지 체크 후 경사로 설치 오른쪽이 더 높은 경우 : 경사로를 놓을 공간이 있는지 체크 후 경사로 설치 로 나눠서 풀어야 한다. 이 때, 경사로를 설치한 곳에는 중복해서 설치할 수 없기 때문에 bridge 라는 리스트를 만들어 해당 위치..
문제 https://www.acmicpc.net/problem/21608 21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 풀이 방법 n = 3 일 때, 전체 9칸을 차례대로 돌면서 주변에 있는 내가 원하는 번호의 개수와, 빈 자리를 체크하여 리스트에 저장한다. 문제에서 주어진 조건에 맞게 자리 배치를 하기 위해 lambda 함수를 사용해 리스트를 정렬하는데, 원하는 번호의 개수와 빈자리를 내림차순으로, 행과 열을 오름차순으로 정렬한다. 이렇게 정렬을 마쳤으면 가장 첫 번째 오는 원소에 있는 행과 열에..