본문 바로가기

문제풀이25

10819번 차이를 최대로 이 문제는 브루트포스 알고리즘을 이용한다. 문제풀이 일단 이 문제는 모든 정수의 순서를 찾아 계산하는 방식으로 브루트포스 알고리즘을 이용해서 풀어보았다. 먼저 값들을 입력하고, 입력한 값들을 배열에 저장한다. 그 배열을 순열로써 저장 시킨다. 그렇게 되면 입력 1의 예시로 20 1 15 8 4 10의 값이 입력되면 값으로 저장이 된다. 이렇게 순열로 모든 경우의 수를 저장한다. 그 다음 순열마다 순열의 차이를 더해서 그 값이 기존의 최대값보다 크다면 최대값을 초기화한다. 모든 순열을 다 돌았다면 최종 최대값을 출력한다. 코드 from itertools import permutations import sys N = int(sys.stdin.readline()) per = permutations(list(m.. 2021. 8. 20.
6987번 올림픽 이 문제는 완전 탐색 알고리즘을 이용한다. 문제풀이 2021. 8. 13.
6603번 로또 이 문제는 백트래킹을 이용한다. 문제풀이 예시와 같이 7 1 2 3 4 5 6 7 으로 n이 입력을 받았다면 n에 방문했는지 확인하기 위해 visit 배열을 생성한다. 현재 아무도 방문하지 않았기 때문에 0의 값들을 가진다. 그다음 lotto함수가 처음 실행되었을때 처음에는 모두 방문하지 않았기 때문에 if문을 실행하지 않고 입력을 실행한다. 먼저 7은 k이기 때문에 제외하고 1부터 입력이 되고 1은 방문을 안했기때문에 방문을 해서 1의 값을 입력 후에 다음 재귀로 넘어간다. 그다음 재귀에서 똑같이 방문을 하지 않았기 때문에 같은 행동을 진행하고 재귀로 넘어간다 첫번째 재귀는 아무도 방문되지 않았기때문에 1,2,3,4,5,6 이 입력되어 6개를 충족하기 때문에 경우의 수를 출력해준다. 이제 출력후에 리턴.. 2021. 8. 13.
2156번 포도주 시식 이 문제는 동적 프로그래밍을 이용한다. 문제풀이 이 문제에는 규칙이 있다. 포도주를 전부 마셔야하고, 연속적으로 3잔을 마시지 않아야한다. 따라서 i-1번째 포도주를 마시고 i번째 포도주를 마신 경우 i+1번째 포도주를 마실 수없다. 그렇다면 조건을 알 수 있다. 1. 이번 회차를 포도주를 마실 때, 이전 회차에서 포도주를 마신 경우 2. 이번 회차에 포도주를 마실 때, 이전 회차에서 포도주를 마시지 않은 경우 3. 전회차에서 2연속으로 마셔서 이번 회차에 포도주를 안마실 경우 를 따져봐야한다. 입력으로 6,10,13,9,8,1 이 들어올 경우 초기값을 먼저 더한다 초기값을 보자면 연속적으로 더한 값 16 하나 띄우고 더한 값 19 하나 넘기고 연속으로 더한 값 23 13을 기준으로 식을 보자 처음의 경.. 2021. 8. 13.
반응형