여니의 취준 준비 253

[n1236] 성 지키기 in python

처음에는 행은 행 따로 열은 열 따로 체크를 해줘야겠다라는 생각이 떠올랐다. 행은 x가 아예 없는 행의 개수를 세어주고 마찬가지로 열도 x가 아예 없는 열의 개수를 세어준다 이렇게 구한 개수중에 큰 값을 출력해주면 된다. 모든 행과 열에 최소한 한 명 이상의 경비원이 배치되어야 한다. 지금 위에서 구한 건 행과 열마다 각각 배치되어야할 경비원의 수를 구한것이다. 만약 행에 있어야할 경비원의 수가 2이고 열에 있어야할 경비원의 수가 3이라고 하자. 문제에서는 모든 행과 열에 경비원이 있어야한다고 했으니까최소한 3명이 있어야 위 조건을 만족할 수 있다. 따라서 max함수를 이용해서 구해주는 것이다. n, m = map(int, input().split()) array = [input() for _ in ra..

[n15686] 치킨 배달 in python

보자마자 조합을 써야하는 문제인가 싶었다. 일단 집 위치와 치킨집 위치를 각 배열에 정리해주었다. 탐색하기 편하도록! combinations 함수를 이용하여m개의 치킨집 경우의 수를 뽑아낸다. 도시의 치킨거리가 가장 작게되는 경우의 수를 구하는 거니까.min함수를 이용해야 한다. answer의 초기값은 int형 max값으로 설정 (1 * 10^9)만약 answer의 값이 sum보다 크다면answer에는 sum값을 집어넣어주면 된다. from itertools import combinations n, m = map(int, input().split()) array = [list(map(int, input().split())) for _ in range(n)] houses = [] chickens = [] ..

[n14503] 로봇 청소기 in python

문제에 나와있는 순서대로만 구현하면 풀리는 문제! 빈칸 : 0, 벽 : 1, 청소한 칸 : 2로 구분하였다. 처음에는 청소한 구역도 1로 처리했는데 이렇게 하면 2번의 c,d조건을 판별할 수 없었다. 그리고 1번이랑 2번을 각각 독립적으로 움직이게끔 하는 과정이 살짝 버거웠다 ㅎ.. 그리고 % 연산자를 활용해야 하는 부분을 잘 기억해야한다.. 매번 헷갈리지만 ^0^ 왼쪽 방향으로 돌릴 땐 (d+3)%4로 해주면 되는데, d에 3을 더하는 이유에 대해 알아야 앞으로도 사용해먹을 수 있을 것 같아서 상세하게 풀어써보기! 방향은 0, 1, 2, 3 이렇게 있다. 3에서 왼쪽으로 움직이면 2가 되어야하는데 이때는 -1을 해주면 된다. 그러나 문제가 있다. 0에서 왼쪽으로 움직이면 방향은 3이 되어야한다. 그래서..

[n6603] 로또 in python

백트래킹을 사용하여 풀어나간 문제! 이번에는 방문하는 노드 체크 과정을 빼먹지 않고 잘 했다! for문에서 시작점 부분을 함수 매개변수로 넘겨주는 부분을 설정하지 않아서 애먹었던... cnt가 6 => 즉, 6개의 숫자를 모두 뽑아낸 경우에는 그 숫자들을 모두 출력한다. print(*array)를 하게 되면, 배열 형식으로 출력되지 않고 1 2 3 4 5 6 이런식으로 출력된다! # k=array[0] # array[1]~array[7] = 원소 배열 def dfs(array, cnt, temp, i): k = array[0] if cnt == 6: print(*temp) return for i in range(i, k + 1): if visited[i]: # 방문한 노드 continue visited[..

[n14248] 점프 점프 in python

오랜만에 bfs 문제를 접했다..! 역시나 오늘도 헤맸다 !.! 문제 해석하기 1 4 2 2 1 (시작점 idx 2 ) 2 -> 왼쪽 1 o -> 오른쪽 4 o -> x -> 오른쪽 1 o -> 왼쪽 2 o -> 왼쪽 4 o o의 개수 = 5개 from collections import deque n = int(input()) array = list(map(int, input().split())) start = int(input()) - 1 visited = [0] * n result = 0 def bfs(start): # start=idx global result queue = deque() queue.append(start) visited[start] = 1 result+=1 while queue: ..

[n14889] 스타트와 링크 in python

보자마자 백트래킹이 떠올랐던 문제! 백트래킹의 원리는 이해했는데 자꾸 방문처리 체크하는 부분을 빼먹어서 애를 먹는다; 백트래킹 dfs(depth,now): if depth==n: return #함수 종료 for i in range(n): if visited[i]: continue visited[i]=1 dfs(depth+1,now) visited[i]=0 문제를 풀긴 풀었는데 시간이 7140ms..? 허허.. 최대한 필요 없는 과정 제외했다고 생각했는데 ㅠㅠ... s_team에는 스타트팀에 들어간 팀원의 번호 t_team에는 링크팀에 들어간 팀원의 번호를 넣었다. func함수에서 각 팀의 능력치를 계산하고 최소인지 아닌지 판별하여 answer에 값을 넣는다. n = int(input()) s = [lis..

[n2535] 아시아 정보올림피아드 in python

보자마자 lambda 함수로 정렬해놓고 나라 번호 저장하는 배열 하나 만들면 우선순위도 해결되겠다고 생각하며 풀기 시작했다. lambda를 매번 까먹는 1인.. array=sorted(array,key=lambda x:x[2], reverse=True) [a,b,c] -> c 기준으로 내림차순 정렬 만약 answer의 길이가 3개가 되면 이미 금은동이 정해진 거니까 반복문에서 빠져나온다. 시간 : 84ms..? 거의 맨 끝이다.. 고수님들의 코드를 한 번 탐색하러 가봤다! n = int(input()) # lambda로 정렬 array = [list(map(int, input().split())) for _ in range(n)] array = sorted(array, key=lambda x: x[2],..

[n1292] 쉽게 푸는 문제 in python

최대한 반복문을 줄이고자 했던 나의 노오력.. temp값이 1이면 반복문 1번 2이면 반복문 2번 이런식으로 answer 배열에 값을 채워넣었다! [1,2,2,3,3,3...] 그래서 answer 길이가 끝을 나타내는 정수(입력값)보다 커지면 반복문을 종료하고 합을 도출해내는 방식으로 구현하였다. f, e = map(int, input().split()) temp = 1 answer = [] while len(answer) < e: for _ in range(temp): answer.append(temp) temp += 1 print(sum(answer[f-1:e]))

[n1058] 친구 in python

아휴 이 문제는 이해하는 것부터 힘들었다 ^.^; 말장난에 놀아난 1인.. 나야 나.. visited를 1차원 배열로 하려고 했는데 계속 오류가 났다 결국 더 보기 편하게 2차원으로 걍 쪼개버렸다 A B C 친구가 있다. 2-친구가 되기 위한 조건은 총 2가지 1. A, B가 서로 친구 or 2. A와 C, B와 C가 친구인 경우 아래 예시로 살펴보면 A와 B가 친구 -> 2-친구 조건1 만족o A와 C가 친구 x -> 조건1 만족x, 그러면 조건 2를 살펴본다. A와 B가 친구이고 C와 B가 친구이므로 A와 C도 친구가 될 수 있다. -> 조건2 만족o ** fucn 함수 안에 있는 조건문에서 인덱스 순서가 바뀌어도 상관 없었다 A->B랑 친구이면 B->A도 친구이기 때문! # 두사람이 친구 or (A..