728x90

코테준비/알고리즘 16

#2178 미로탐색

백준 #2178 미로탐색 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로만 이동할 수 있다. 처음짠코드 BFS로 1인 칸들을 큐를 활용하여 너비우선 탐색 구현에는 성공했으나... 그냥 순서대로 길을 탐색하기만 했고 그 중 최종 위치까지의 최단경로를 찾는 방법을 몰랐다! count로 +1 하다보니 그냥 갈수있는 칸, 1의 갯수가 나왔다 정답 이전 코드에서는 check를 단지 이전에 방문한 적 있는지 없는지를 알아내는데 사용했는데 여기선 용도를 바꿨다. check 일단 0으로..

백준 #2559 수열

1차시도: 2중 for 문을 사용했더니 시간초과가 떴다 -> 개선: for문을 하나만 쓰고 이전의것을 빼고 다음것을 더하는 방식으로 수정 2차시도: 틀렸습니다 -> 개선: maxnum의 기본 값을 0으로 설정했었는데 최대값이 음수일수도 있기 때문에 maxnum = now(초기값)로 수정 num, seqe = map(int, input().split()) temp = list(map(int, input().split())) leng = len(temp) now = sum(temp[:seqe]) maxnum = now for i in range(1,leng-seqe+1): now = now + temp[i+seqe-1] - temp[i-1] maxnum = max(maxnum, now) print(maxnum)

파이썬알고리즘책 - 그리디

1. 거스름돈 2. 큰 수의 법칙(***) 교훈: 효율을 높이려면 일반화해서 나만의 공식을 만들자!!! 3. 숫자카드게임 교훈: 꼭 배열을 여러개 만들필요 있을까? -> 가능한건 for 한 회차 안에서 연산을 끝내자 N,M = map(int,input().split()) minarr=[0]*N for i in range(N): arr = list(map(int,input().split())) num = min(arr) minarr[i] = num print(max(minarr)) 4. 1이 될 때까지 답이랑은 조금 다르지만... 맞나? n,k = map(int,input().split()) count = 0 while(n != 1): count += 1 if(n%k==0): n = n//k else: n..

백준 #10871

X보다 작은 수 정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오. 배열을 입력받는건가? 일단 배열 입력 방법을 검색해봤다. ' for (i = 0; i < 5; i++) { scanf("%d", &array[i]); } 이렇게 하면 5개짜리 배열이 입력되나봄 아 잠깐만!!! 진짜 전에도 비슷한 문제 때문에 짜증났던건데 검색해 보니까 배열 값을 한 번에 입력받은 후 조건에 맞는 값들만 출력되는게 아니라 하나 씩 입력 하고 바로바로 출력되는식으로 만들어도 된댄다ㅡ.ㅡ 괜히 더 복잡하게 생각했네ㅡㅡ #include int main(void) { int n, x, a; scanf("%d %d", &n, &x); for (int i = 0;..

728x90