[프로그래머스] N으로 표현 [Python]
·
알고리즘/프로그래머스
문제 코드 def solution(N, number): if N == number: return 1 answer = -1 arr = [set() for _ in range(8)] for i in range(len(arr)): arr[i].add(int(str(N)*(i+1))) for i in range(1,8): for j in range(i): for op1 in arr[j]: for op2 in arr[i-j-1]: arr[i].add(op1+op2) arr[i].add(op1-op2) arr[i].add(op1*op2) if op2 != 0: arr[i].add(op1//op2) if number in arr[i]: answer = i+1 break return answer 풀이방법 이 문제는 동..
구름톤 챌린지 4주 차 학습 일기(Day 02)
·
알고리즘/구름톤
문제 플레이어는 1번부터 N번까지의 번호가 붙은 N개의 도시와 M개의 도로가 있는 나라에 살고 있다. 각 도로는 서로 다른 두 도시를 양방향으로 연결하고 있고, 주어진 도로만을 이용해 임의의 두 도시 사이를 이동하는 것이 가능하다. 플레이어는 차를 타고 S번 도시에서 E번 도시로 이동하려고 한다. 플레이어가 두 도시 사이를 이동할 때는 항상 가장 작은 수의 도시를 거치는 경로를 따라 이동한다. 예를 들어 아래 그림과 같이 도시와 도로가 주어지고, 플레이어가 1번 도시에서 4번 도시로 이동하려고 할 때는 항상 1 → 3 → 4의 경로를 따라 이동한다. 이 경우에는 출발 도시와 도착 도시를 포함해 총 세 개의 도시를 거쳐 이동할 수 있다. 1 → 5 → 2 → 4의 경로로 이동하는 것은 출발 도시와 도착 도..
구름톤 챌린지 4주 차 학습 일기(Day 01)
·
알고리즘/구름톤
문제 이 세상에는 수많은 컴퓨터들이 통신망을 통해 서로 연결되어 정보를 교류하고 있다. 오늘 플레이어는 이 거대한 통신망 중 한 구역을 조사하고자 한다. 플레이어가 조사할 구역에는 N개의 컴퓨터가 있고, M개의 통신 회선이 있다. 각 컴퓨터는 1번부터 N번까지 번호가 붙어 있고, 통신 회선은 서로 다른 두 컴퓨터를 양방향으로 연결하고 있다. 컴퓨터들은 연결 여부에 따라 여러 개의 컴포넌트로 나뉜다. 어떤 두 컴퓨터가 통신 회선만을 이용해서 연결되어 있다면 두 컴퓨터는 같은 컴포넌트에 속한다. 플레이어는 여러 개의 컴포넌트 중, 가장 밀도가 높은 컴포넌트를 조사하려고 한다. 컴포넌트의 밀도는 그 컴포넌트에 포함된 통신 회선의 개수를 컴퓨터의 수로 나눈 값이다. 주어진 통신 구역을 분석해서, 가장 밀도가 높..
구름톤 챌린지 3주 차 학습 일기(Day 02)
·
알고리즘/구름톤
문제 구름 심시티를 하고 있는 플레이어는 한 변의 길이가 N인 정사각형 모양의 마을 M을 만들고 있다. r번째 행, c번째 열에 해당하는 칸에는 숫자 M(r,c)가 적혀 있다. M(r,c)는 0또는 1중 하나이며, 각 숫자가 의미하는 바는 아래와 같다. - 0이면 아무것도 없는 칸이다. - 1이면 집이 있는 칸이다. 마을에 있는 집에 전력을 공급하기 위해선 그 집에 발전기를 설치하거나, 상하좌우로 인접한 집 중 하나가 전력을 공급받고 있으면 된다. 플레이어가 모든 집에 전력을 공급하기 위해서 설치해야 할 발전기의 최소 개수를 구해보자. 코드 from sys import stdin as s from collections import deque def bfs(si,sj): global count v[si][..
구름톤 챌린지 3주 차 학습 일기(Day 01)
·
알고리즘/구름톤
문제 구름-그라운드 게임에는 통증이라는 시스템이 있다. 통증 수치가 높다면 게임에서 승리하기 어려워지므로, 아이템을 적절히 사용해 통증 수치를 으로 유지하는 것이 중요하다. 게임 안에는 통증 수치를 감소시켜 주는 아이템이 종류가 있다. 아이템의 이름은 이고, 각 아이템을 사용 시 각각 만큼 통증 수치를 감소시켜 준다. 각 아이템은 원하는 만큼 획득할 수 있다. 플레이어는 적과의 전투에서 피해를 입어 현재 의 통증 수치를 가지고 있다. 플레이어가 통증 수치를 으로 줄이기 위해 필요한 아이템의 최소 개수를 구해보자. 단, 사용했을 때 통증 수치가 보다 작아지는 아이템은 사용할 수 없음에 유의하시오. 코드 from sys import stdin as s N = int(s.readline()) A, B = ma..
구름톤 챌린지 2주 차 학습 일기(Day 02)
·
알고리즘/구름톤
문제 구름 찾기 게임은 한 변의 길이가 인 격자 모양의 게임판에서 진행하는 게임이다. 게임판의 일부 칸에는 구름이 숨겨져 있고, 게임판에 숨겨진 모든 구름의 위치를 찾으면 게임에서 승리할 수 있다. 구름 찾기 게임의 제작자인 플레이어는 조금 더 쉽게 구름을 찾을 수 있도록 도와주는 깃발을 게임판 위에 설치하려고 한다. 깃발은 구름이 없는 칸이면서, 상하좌우와 대각선으로 인접한 여덟 칸 중 구름이 하나 이상 있는 칸에만 설치할 수 있다. 이렇게 설치한 깃발에는 인접한 여덟 칸 중 구름이 있는 칸의 개수에 해당하는 값이 적힌다. 플레이어는 깃발을 세울 수 있는 모든 칸에 깃발을 세워두었다. 문득, 플레이어는 깃발 중 값이 인 깃발이 몇 개나 있는지가 궁금해졌다. 여러분이 플레이어를 대신해 값이 인 깃발의 개..
구름톤 챌린지 2주 차 학습 일기(Day 01)
·
알고리즘/구름톤
문제 길이가 인 문자열 가 주어진다. 플레이어는 문자열 를 서로 겹치지 않는 개의 부분문자열로 나누려고 한다. 부분문자열은 모두 길이가 이상이어야 하며, 원래 문자열에서 연속해야 한다. 문자열을 나누는 방법에 따라 플레이어는 점수를 얻을 수 있다. 점수는 다음 과정에 따라 계산된다. 문자열 를 위 조건에 따라 나눴을 때, 등장하는 모든 부분문자열을 중복 제거하고 사전순으로 정렬한 결과를 라고 한다. 나누어진 개의 문자열이 각각 에서 번째로 등장하는 문자열이라면, 얻을 수 있는 점수는 이다. 예를 들어, abcd라는 문자열을 개의 부분문자열로 나누는 방법은 {a, b, cd}, {a, bc, d}, {ab, c, d}의 세 가지가 있다. 여기서 부분문자열을 중복 제거하고 사전 순서로 정렬한 결과는 a, a..
[백준] 14940 쉬운 최단거리 [python]
·
알고리즘/백준
문제 풀이 1️⃣ 목표지점 2를 찾아서 위치를 저장해둡니다. 2️⃣ 1의 값들을 전부 -1로 바꿔줍니다. 3️⃣ 찾아놓은 목표지점 위치부터 시작해서 bfs 그래프 너비 탐색을 통해서 이동할 수 있는 부분들을 탐색합니다. 4️⃣ 전체 탐색하고 탐색하지 못한부분은 -1로 그대로놔둡니다. 5️⃣ arr에 저장되어있는 값을 출력형식에 맞게 출력합니다. 전체 코드 from sys import stdin as s from collections import deque s=open('input.txt','rt') # bfs 함수부분 def bfs(si,sj): q=deque() q.append((si,sj)) v[si][sj]=1 # 4방향 탐색위한 방향설정 dx=[0,1,0,-1] dy=[1,0,-1,0] while..
yunchan^.^
'알고리즘' 카테고리의 글 목록