\* 주요 변경 사항입력 처리 수정: called_numbers를 25개의 숫자로 직접 입력받도록 변경했다빙고 확인 최적화: 리스트 컴프리헨션을 사용하여 코드를 더 간결하게 만들었다.리스트 컴프리헨션을 통해 대부분의 빙고 확인 반복문을 바꿀 수 있었다. 리스트 컴프리헨
백준 온라인 저지 문제 20546번
이코테 정독을 하면서 그리디, 구현, 그래프 탐색 알고리즘까지 배웠는데 뒷 내용까지 공부하면 앞 내용을 다시 공부해야 할 것 같아서 배운 개념 문제 위주로 풀어보려는데 그런 문제를 찾기가 힘듦. 백준 사이트를 잘 못 이용하고 있는 것 같음. 그러다가 푼 게 이 문제인데
단순히 그냥 쉬운 문제이다. 브론즈는 프로그래밍 문법에 대한 이해로 풀 수 있는 문제인 것 같고, 실버부터는 정렬, 그래프 탐색, 그리디 같은 알고리즘 개념을 사용해야하는 문제인 것으로 사료된다.
이 문제 솔직히 브론즈 2라서 만만하게 봤는데 막혔었다. 트럭이 세대고 각 줄마다 입력이 되어서 어떻게 처리를 해야하는지 감을 못 잡았었음.리스트를 하나를 만들어서 카운트 하면 간단하게 해결가능함.
쉬우면서 재미있는 문제이다. 컴공 1학년때 C언어 배우면서 이런 예제를 다룬 기억이 난다. 백준 사이트 "자가비의 추천 문제" 문제집에 있는 문제인데, 아마 프로필을 보니 개발자면서 유튜브를 같이 하고 있는 것 같다. 처음에는 홀수 짝수를 나눠서 로직을 만들어야 한다고
ord()함수를 쓰는데 헷갈림이 있어서 조금 버벅인 문제이다. ord()함수는 문자에 해당하는 유니코드 값을 정수로 바꿔주는 함수이다. 들어가야 할 값은 문자이고, 나오는 값은 정수이다. 이걸 헷갈려서 더하기 로직이 제대로 작동안했었다.
문제를 해결하기 까지 몇가지 이유로 오류가 났다.파이썬에서는 문자열이 변경 불가능하다.소문자, 대문자를 구분하는 방법.리스트에 있는 값을 문자열로 바꾸는 방법.자세한 설명은 게시글 맨 밑에 기술파이썬에서는 문자열 변경이 불가능 하다고 한다. 그것 때문에 오류로 실행이
입력은 여러개의 테스트 케이스로 이루어져 있다.각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 테스트할 패스워드가 주어진다.마지막 테스트 케이스는 end이며, 패스워드는 한글자 이상 20글자 이하의 문자열이다. 또한 패스워드는 대문자를 포함하지 않는다.각 테스트
오박사 : 그럼 다솜아 이제 진정한 포켓몬 마스터가 되기 위해 도감을 완성시키도록 하여라. 일단 네가 현재 가지고 있는 포켓몬 도감에서 포켓몬의 이름을 보면 포켓몬의 번호를 말하거나, 포켓몬의 번호를 보면 포켓몬의 이름을 말하는 연습을 하도록 하여라. 나의 시험을 통과
이 문제... 처음 봤을때는 어떻게 풀어야 하나 감이 오지 않았다. 고민해도 아이디어가 떠오르지 않아서 구글링을 하니까 비슷한 유형의 대표적인 문제로 프로그래머스의 "올바른 괄호"라는 문제가 있다고 한다. 그래서 그 문제부터 풀고, 바로 이전글에서 블로그로 남겨두었다.
프로그래머스 네트워크 문제와 비슷하지만 그것보단 좀 쉬운 문제이다.1번 컴퓨터와 연결되어 있는 컴퓨터를 모두 탐색한 다음, 그 컴퓨터 수를 출력하는 방식이다. 1번 컴퓨터와 연결되어 있는 것만 찾으면 되기 때문에 프로그래머스의 "네트워크"보다는 훨씬 간단하다. 아직 D
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 첫째 줄에는 배추를 심은 배추밭의 가로길이 M(1 ≤ M ≤ 50)과 세로길이 N(1 ≤ N ≤ 50), 그리고 배추가 심어져 있는 위치의 개수 K(1 ≤ K ≤ 250
프로그래머스의 "네트워크", 백준의 "바이러스", 백준의 "유기농 배추" 와 비슷한 느낌이다. 사실 실버 등급 정도의 DFS면 거의 다 비슷하지 않을까 싶다. 사실 위에서 나열한 문제는 지금까지 푼 DFS 문제이기도 하다.네트워크 개수를 구하는 것과 같다. 메인에서 호
파이썬의 위대함을 알게 된 문제다. 처음에는 공백의 갯수를 카운트해서 거기에 +1을 하려고 했는데. 그러려면 공백 하나만 입력되었을 때, 마지막에 공백이 있는 경우를 모두 예외로 처리해줘야한다. 파이썬은 아래의 코드 처럼 공백 기준으로 받아서 len으로 갯수를 셀 수
전형적인 DFS 문제이긴 한데 거기에 새로운 개념이 들어왔다. 처음에 DFS 문제는 보통 2차원 배열을 이용해서 연결요소를 파악하고 탐색을 한다. 이 문제에서는 정점의 개수가 N (5 ≤ N ≤ 100,000)이기 때문에 2차원 배열로 만들면 최대 백억개가 된다. 그래
백준의 24479번 문제인 "알고리즘 수업 - 깊이 우선 탐색 1"과 거의 다를 게 없는 문제이다. 덕분에 쉽게 백준 랭크 10점을 얻었다. 이전 문제는 오름차순으로 정렬을 해서 탐색을 하지만 이번 문제는 내림차순으로 정렬하면 된다. 이전 문제에서 오름 차순으로 정렬을
이 문제는 촌수를 구해야 하는 두 사람 중 하나를 main에서 DFS를 호출할때 시작점으로서 넣어주고, DFS함수 안에서 조건문으로 들어오는 값이 나머지 하나의 값이면 카운트 값을 리턴한다.그래프나 2차원 배열로 탐색을 할때, 카운트가 잘 될지 의심이 들긴 했지만 애초
루트가 1인 트리라고 가정한다. 예제 1번을 기준으로 시각화를 한다.대충 이런 형태가 될 것이다. 아직 다른 자료구조와 알고리즘에 대해서 많이 공부하지 않아서 잘 모르지만, 그래프탐색 문제는 시각화해서 생각해보면 충분히 도움된다. 경험상 대부분의 문제는 머리만으로 생각
노드와 간선, 시작 노드 값을 받고 단순히 그 시작 노드부터 DFS와 BFS를 이용하면 풀 수 있는 문제이다. DFS는 지금까지 꽤 연습을 해서 오류없이 한번에 금방 구현을 했지만, BFS는 아직 서툴러서 그런지 몇번의 오류가 있었지만 구현을 했다.각각 answer 리
첫째 줄에는 격자의 크기를 나타내는 M (2 ≤ M ≤ 1,000) 과 N (2 ≤ N ≤ 1,000) 이 주어진다. M줄에 걸쳐서, N개의 0 또는 1 이 공백 없이 주어진다. 0은 전류가 잘 통하는 흰색, 1은 전류가 통하지 않는 검은색 격자임을 뜻한다.바깥에서
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다.둘째 줄부터 h개 줄에는 지도가 주어진다. 1은 땅, 0은 바다이다.입력의 마지막 줄에는 0이 두 개
일단 이 문제가 왜 실버4인지 모르겠다. 지금까지 DFS문제를 풀었지만, 간단한 DFS 문제도 실버2 등급이었는데, 이건 좀 더 응용해서 풀게하는 문제인데 실버4다. 모든 문제가 정확한 등급을 받기는 어려운 것 같다. 어떻게 보면 이 문제가 저평가된게 아니라 다른 DF
입력의 첫 번째 줄에는 게임 구역의 크기 N (2 ≤ N ≤ 3)이 주어진다.입력의 두 번째 줄부터 마지막 줄까지 게임판의 구역(맵)이 주어진다.게임판의 승리 지점(오른쪽 맨 아래 칸)에는 -1이 쓰여있고, 나머지 칸에는 0 이상 100 이하의 정수가 쓰여있다.‘쩰리’
첫 번째 줄에는 지도의 크기 N(정사각형이므로 가로와 세로의 크기는 같으며 5≤N≤25)이 입력되고, 그 다음 N줄에는 각각 N개의 자료(0혹은 1)가 입력된다.첫 번째 줄에는 총 단지수를 출력하시오. 그리고 각 단지내 집의 수를 오름차순으로 정렬하여 한 줄에 하나씩
문제 문제 이해 코드
첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오른쪽 위 꼭짓점의 x, y좌표값이 빈칸을 사이에 두고 차례
백준 2667번 단지번호붙이기https://velog.io/@junseong/%EB%B0%B1%EC%A4%80Python-2667%EB%B2%88-%EB%8B%A8%EC%A7%80%EB%B2%88%ED%98%B8%EB%B6%99%EC%9D%B4%EA%B8%B0
첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다.좌표 (r, c)의 r은 위에서부터
상하좌우로 인접해 있는 연결요소의 수를 카운트 하고, 각 값을 제곱해서 더해주면 된다. 기본적인 DFS로직을 이해한다면 어렵지 않다.두가지의 type이 있기 때문에 매개변수로 타입의 종류를 추가한다.
첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다.다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다.하나의 줄에 아침까지 살아있는 양과 늑대의 수를 의미하는
첫 번째 줄에는 현수막의 크기인 M와 N가 주어진다. (1 ≤ M, N ≤ 250)두 번째 줄부터 M+1 번째 줄까지 현수막의 정보가 1과 0으로 주어지며, 1과 0을 제외한 입력은 주어지지 않는다.혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇
다섯 개의 줄에 다섯 개의 정수로 숫자판이 주어진다.첫째 줄에 만들 수 있는 수들의 개수를 출력한다.처음에는 DFS로 풀어야하는 게 맞나 싶었다. 순열/조합으로 푸는 문제라고 생각했다. 그런데 문제를 보니 그냥 시뮬레이션+DFS로 풀라고 풀어서 설명해준다. "임의의 위
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.첫째 줄에 지나야 하는 최소의 칸 수를 출력한다. 항상 도착위치로 이동할 수 있는 경우만 입력으로 주어진다.
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.이 문제가 DFS/BFS 유형인걸 알고 문제를 봤다. 근데 이 문제를 그래프탐색으로 풀 수 있는 문제인가? 라는 생각이 먼저 들
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토들의 정보가 주어진다. 즉, 둘째 줄부터 N개의 줄에는
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.백준의 1697번 숨바꼭질 문제와 비슷하다.https://velog.io/@juns
왜인지 모르겠지만 예제 입력을 하면 출력은 잘 나온다. 하지만 로직 자체가 틀렸다. 이게 최단거리를 하나만 구하는 문제면 visited를 지금처럼 사용하면 된다. 하지만 여러개의 최단거리를 구해야 하는 문제이기 때문에 visited를 이렇게 사용하면 정상적으로 구할 수
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.첫째 줄에 수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.둘째 줄에 어떻게 이동해야 하는지 공백으로 구분해 출력한다.같은 숨바꼭질 시리즈인데 이번에는 가장 빠른 경로를 BFS
첫 번째 줄에 수빈이가 있는 위치 N과 동생이 있는 위치 K가 주어진다. N과 K는 정수이다.수빈이가 동생을 찾는 가장 빠른 시간을 출력한다.숨바꼭질 1번 문제와 비슷한데 주의할 점이 있다. 먼저 순간이동을 하는 경우에는 시간이 들지 않는다. 그래서 이동 방식 중 가장
업로드중..첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸과 상어의 수가 각각 한 개 이상인 입력만 주어진다.첫째 줄에 안전 거리의 최댓값을
첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개의 줄에
문제 입력 출력 입력 예시 1 출력 예시 1 문제 이해 코드
첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어온다. 시작점과 끝점이 같은 도로는 없으
첫째 줄에 도시의 개수 N(1 ≤ N ≤ 1,000)이 주어지고 둘째 줄에는 버스의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 그리고 셋째 줄부터 M+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 그리고
첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미한다.(1, 1)과 (N, M)은 항상 뚫려있다.첫째
입력은 여러 개의 테스트 케이스로 이루어져 있다.각 테스트 케이스의 첫째 줄에는 동굴의 크기를 나타내는 정수 N이 주어진다. (2 ≤ N ≤ 125) N = 0인 입력이 주어지면 전체 입력이 종료된다.이어서 N개의 줄에 걸쳐 동굴의 각 칸에 있는 도둑루피의 크기가 공백
첫째 줄에 도시의 개수 n(1≤n≤1,000)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 주어진다. 그리고 그 다음에는 도
백준 1261번 알고스팟 문제와 거의 똑같은 문제이다. 알고스팟 문제를 풀때보다 다익스트라 이해도가 높아서 그런지는 모르겠지만 이 문제 설명이 좀 더 깔끔하다. 이 문제가 "BFS + 시뮬레이션" 문제와 다른 점은 BFS문제는 보통 맵이 0과 1로 이루어져 있고, 둘
첫째 줄에 테스트 케이스의 개수가 주어진다. 테스트 케이스의 개수는 최대 100개이다. 각 테스트 케이스는 다음과 같이 이루어져 있다.첫째 줄에 컴퓨터 개수 n, 의존성 개수 d, 해킹당한 컴퓨터의 번호 c가 주어진다(1 ≤ n ≤ 10,000, 1 ≤ d ≤ 100,
다익스트라 기본 구현문제이다. 정말 기본적인 구현만 하면 정답 처리를 받을 것 같다. 단 같은 경로에 두개 이상의 길이 있을 수도 있기 때문에 조건문을 하나 넣어서 불필요하게 반복문을 돌지 않도록 방지해야한다.경로가 하나씩만 있으면 굳이 필요는 없는 것 같다. 하지만
이 문제는 다익스트라인데 조금 활용이 필요하다. 어려운 건 아니라서 그냥 생각만 조금 하면 풀 수 있다.1번 노드부터 N번 노드까지 돌아가면서 다익스트라를 돌리고, distance값이 수색범위 안일 경우에 item_number에 있는 인덱스에 맞는 값을 더해주면 된다.
다익스트라 문제를 풀고 있는데 다익스트라는 골드 범위 내의 문제 중에서는 활용이 잘 없는 것 같다. 애초에 다익스트라 문제를 사람들이 많이 안 풀었다. 만명도 안되는 다익스트라 문제가 수두룩하다. 왜 그런지는 잘 모르겠다.이번 문제도 별 다를 게 없다. N-1번째를 제
재귀함수 카테고리의 첫 문제이다.재귀 함수는 두가지로 분류 할 수 있다. Basecase와 Recursioncase이다. Basecase는 재귀 호출의 마지막 스탑을 해줄 부분이다. 이번 문제 같은 경우는 N번에서 계속 재호출되면서 N이 1, 0이 될땐 따로 값이 정해
재귀함수 문제이므로 반복문, 재귀함수 둘다로 풀 수 있다. 문제 설명의 가장 아래 값이 N에 따라서 가져야하는 칸토어 집합 출력 값이다. 즉, N=3일때 아래의 값이 출력되면 된다.칸토어 집합의 결과값은 아래와 같은 일정한 규칙을 가진다.이러한 식을 만족하기 때문에 재
문제
업로드중..조합을 배우고 이 문제를 푸는데 왜 이문제가 골드 난이도인지는 이해가 되지 않았다. 근데 또 예시 입력 출력이 같은데 자꾸 코드가 틀려서 다시 한번 문제를 보니까, 최소 한개의 모음 최소 두개의 자음인 것만 출력하는 것이었다. 이런 문제를 잘 안풀어서 그런지
그냥 순열문제이다. 대신 원소가 담긴 리스트가 없다. 리스트를 만들거나 그냥 for 문의 i값을 이용하면 쉽게 해결가능하다.
파이썬에 기본 내장된 정렬함수를 쓰면 풀 수 있다.이 코드를 제출해서 정답 판정을 받았는데, 좀 더 간결하게 코드를 짤 수가 있다.난 첫번째 인자를 x에 받아서 인덱스를 받아서 사용한 거고, 밑 코드는 첫 값을 두개의 변수에 받은 것이다.
선수의 등번호와 각 종목마다의 점수를 받는다. 1,2,3등의 등번호를 출력하면 된다. 우선 순위 1\. 세 점수의 곱이 가장 작은 사람 2\. 곱이 같다면 세 점수의 합이 작은 사람 3\. 둘 다 같다면 등번호가 낮은 사람이를 참고해서 3명까지 순서대로 등번
브루트포스 알고리즘은 직역하면 "무식한 힘"이다. 모든 경우에 대해서 다루는 것이다. 그래서 이 방식으로 문제를 풀면 맞을 수는 있는데, 시간과 메모리의 제약에 걸리때는 못 쓰기도한다.그냥 모든 경우를 탐색하면 된다. 입력에 대해 스트라이크와 볼의 개수를 주고, 우리는
동전의 종류는 순서대로 coins라는 배열에 넣고, 순서대로 하나씩 값을 빼서 나눠주고 값은 더해주고, 나머지는 갱신해주면 된다.
이 문제를 처음 봤을 때는 순열과 브루트포스를 쓰면 풀 수 있다고 생각했다. 하지만 N이 50까지라서 순열을 만드는 것만해도 50!이다. 엄청나게 큰 수라서 브루트포스로는 안정적으로 풀 수가 없다. 실제로 시간초과 판정 받았다. 그래서 이 문제는 그리디로 풀어야 한다.
문제를 생각해내고 풀이를 작성하는 것 모두가 아직의 나에게 좀 어렵다.이 문제는 직선상에서 어떤 점(좌표)에 효율적이게 다녀와야한다.그리디 조건멀리있는 것 부터 가야 효율적이다.음수와 양수를 왔다갔다하면 비효율적이다.(한번 탐색할때 한쪽만 하는게 좋음)무조건 책을 가득
문제가 정말 재밌다. DP알고리즘을 배우다가 그 예시로 다뤘던 문제인데, 좌표상에서 움직여야 해서 처음에는 DFS/BFS로 풀어야 한다고 생각했다. 하지만 특정한 값에만 가는 것도 아니고, 최단거리를 뭍는 것도 아니다. (현재 DFS/BFS에 대한 이해도가 좀 떨어지긴
이런 유형이 조약돌 문제라고 하는 DP대표 문제라고 한다. 너무 재밌다. DFS/BFS를 처음 배울때도 재밌었는데, DP도 그만큼 재밌는 것 같다. 생각하고 문제를 풀이하는 게 체계적이라서 그런 것 같다. 아무튼 3가지 중에서 하나씩 골라가면서 N개의 뽑았을때의 최솟값
DP에서 LIS라는 부분수열을 구하는 문제라고 한다. 코드가 정말 짧지만 강력하다. 이 문제의 다른 사람의 풀이를 보고 이해하는데 시간이 꽤 걸렸다. 약간 DFS/BFS를 처음 접할때와 매우 비슷했다. 이해가 너무 안되어서 코드 한줄한줄에 따라 dp값이 어떻게 처리되는
사실 이 문제를 예전에 마주한 적이 있다. 근데 이걸 어떻게 풀어야 할지 감이 안잡혀서 넘겼었다. 브루트포스, 그리디, DP를 조금씩 찍먹해본 입장에서 다시봐도 잘 몰랐다. 문제 풀이에 대한 강의를 듣고도 구현을 할 수는 없었다. 그만큼 아직은 경험치와 능력치가 부족한
처음 문제를 봤을때, 이 문제는 브루트포스로 풀 수 있다고 생각했고 그게 맞았다. 그런데 구현력과 세부적인 로직을 떠올리지 못해서 스스로 풀지를 못 했다. 문법적으로 잘 몰라서 그렇기도 하고, 코드가 약간 시뮬레이션 + 브루트포스라서 머릿속에서 여러 생각이 섞여서 그런
DP문제 유형중 카데인 알고리즘 문제이다. Kadane's Algorithm수열에서 연속된 값을 합이 최댓값을 구하는 문제이다. 연속된 값의 합이란 값을 넘어가는 것없이 붙어있는 값들끼리 더했을때는 최댓값을 말하는 것이다.dpn -> n번까지의 dp의 최댓값. 이게 아