본문 바로가기

백준

(223)
백준19941 - 햄버거 분배 www.acmicpc.net/problem/19941 19941번: 햄버거 분배 기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사 www.acmicpc.net 재밌는 문제였다. 왼쪽을 기준으로는 먼 쪽에 있는 햄버거를 찾고 왼쪽에서 먹을 수 있는 햄버거가 없다면 오른쪽 기준 가까운 쪽에 있는 햄버거를 먹으면 되는 문제이다. N, K = map(int, input().split(' ')) array = [] # 0은 햄버거 먹은 곳, 1은 햄버거 존재, 2는 사람 people = [] str = input() ans = 0 for i in range(len(str))..
백준2206 - 벽 부수고 이동하기 www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net BFS와 우선순위 큐를 이용하여 해결한 문제이다. 먼저 벽을 부순 경우(d1)와 부수지 않은 경우(d0)를 나누어 현재 가려고 하는 지점에 최소 이동 비용을 저장하였다. 벽을 부순 경우는 d0에서 최소 비용을 고려하 이동하였다. 벽을 부수지 않은 경우 1을 만나면 d1에서 최소 비용을 고려하여 이동하였다. 벽을 부수지 않은채로 0을 만나면 d0에서 최소 비용을 고려하여 이동하였다. 그리..
백준12852 - 1로 만들기2 www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net top down 방식을 이용하여 풀었다. 그런데 풀고 나서 보니 bottom up 방식이 더 편하게 느껴졌다. 한가지 주의할 점은 top down 방식으로 풀면 콜 스택이 깊어질 경우 프로그램이 재귀 호출이 깊어진다고 에러를 낸다는 것이다. 이 점만 주의하면 쉽게 풀 수 있다. import sys from copy import deepcopy arr = [987654321 for i in range(1000001)] trace = [] ans = [987654321, []] N = int(input()) def to..
프로그래머스-월간 코드 챌린지 시즌1-두 개 뽑아서 더하기 programmers.co.kr/learn/courses/30/lessons/68644 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 진짜 오랜만에 프로그래머스를 풀어보았다. 월간 코드 챌린지라는 새로운 제도가 생겨서 신기했다. 간단한 문제로 map을 두 번 이용하여 같은 인덱스이 존재하는 숫자이면 더하지 않는 형태로 진행하였다. 중복은 set으로 걸렀다. 아쉬운 점은 sort에서 a - b로 리턴했어도 될 것을 굳이 if문을 이용하여 코드를 길게 만들었다는 ..
백준 2653 - 안정된 집단 www.acmicpc.net/problem/2653 2653번: 안정된 집단 어떤 심리학자는 학교의 학급이나 회사의 부서와 같이 여러 사람들이 모인 집단이 어떤 경우에 안정되어 있는지를 연구하였다. 심리학자는 집단에 속한 모든 사람들이 서로 좋아하거나 혹은 그 www.acmicpc.net 그래프에서 서로 다른 집단을 찾고 그 집단에 속한 모든 노드들을 출력하면 되는 문제다. 해결법은 다음과 같다. 1. 방문 안한 노드를 찾고 거기에서 그 노드와 연결된 모든 노드를 찾는다. ex. 1번 노드를 방문 안했고 1번 노드에 연결된 노드들은 2, 3, 4이다. -> (1, [2, 3, 4]) 2. bfs에 1번에서 했던 작업의 결과로 나온 것을 넣어준다. 3. 전 단계에서 연결된 노드를 탐색하며 1번의 연결된 결..
백준16922 - 로마 숫자 만들기 www.acmicpc.net/problem/16922 16922번: 로마 숫자 만들기 2, 6, 10, 11, 15, 20, 51, 55, 60, 100을 만들 수 있다. www.acmicpc.net 파이썬으로 갈아탄지 2일차인데 생각보다 C++이랑 많이 달라서 고생중이다. 먼저 내장 함수들을 익혀야겠다. 이 문제는 백트래킹을 이용하면 금방 풀리는 문제이다. 주의할 점은 다음과 같다. 1. XXI와 XIX는 같으니까 이것을 걸러줘야 한다. 따라서 현재 탐색한 위치에서 뒤에 오는 인덱스는 다시 탐색하지 않고 현재 인덱스부터 탐색하게 하였다. 이것만 주의한다면 쉽게 풀 수 있다. 다른 어려운 난이도도 있는데 나중에 도전해봐야겠다. def matchNumber(rome): if rome == 'I': retu..
백준12904 - A와 B www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 오랜만에 블로그 글을 쓰게 된다. 그동안 네이버 커넥트재단 부스트캠프를 하느라고 블로그 활동이 뜸했지만 올해 목표인 블로그 글 100개 달성을 위해 노력할 것이다. 이 문제는 문자열 S에서 문자열 T로 변환이 가능한지 파악하는 문제이다. 규칙은 다음과 같다. 1. S는 T보다 짧다. 2. S에서 문자열 반전을 안하고 'A'를 붙인다. 3. S에서 문자열 순서를 반전하고 'B..
백준2685 - 님비합 https://www.acmicpc.net/problem/2685 2685번: 님비합 문제 Nim 게임은 몇 개의 돌무더기를 놓고 매 차례마다 각 플레이어가 한 무더기에서 적게는 1개에서부터 많게는 무더기 전체를 가져가는 게임이다. 일반적인 Nim 게임의 승자는 마지막으로 돌을 www.acmicpc.net 오랜만에 알고리즘 문제를 풀었다. 쉬운걸로 골라서 풀었다. 캐리가 발생하면 무시해주고 일의 자리만 계산에 반영하면 끝나는 쉬운 문제이다. 처음으로 스프레드 연산자를 이용하여 알고리즘 문제를 풀었다. const readline = require('readline') let T = 0 const rl = readline.createInterface({ input: process.stdin, output: ..