728x90 Algorithm88 [이것이 코딩 테스트다] 문자열 뒤집기 - Python 이 문제같은 경우 나는 값이 0에서 1로 변하든 1 에서 0으로 변하든 몇번 변하는지 횟수를 알아낸 다음 그 횟수에 + 1 한 후에 2로 나눠서 답을 구했다. 왜 위처럼 생각을 했냐면, 같은 숫자들이 반복해있는 묶음들의 개수를 구한다. 이 묶음의 개수를 구하려면 변하는 지점마다 +1을 해줘야 하고 마지막 으로 +1을 해야지 마지막으로 변하고 이후 끝나는 지점의 묶음의 개수도 구할 수 있다. s = input() result = 0 com_val = s[0] cnt = 0 for i in range(1,len(s)): if com_val != s[i]: cnt += 1 com_val = s[i] # print(cnt) cnt = cnt + 1 result = cnt // 2 print(result) 내가 .. 2023. 8. 24. [이것이 코딩 테스트다]곱하기 혹은 더하기 일단 result라는 변수에 문자열 맨 앞글자를 대입한다(대입할때 문자열이니까 다시 int로 변환해서 대입한다) 그 후에 반목문을 이용해서 입력받은 문자열의 2번째 인덱스부터 확인을 해야한다. 잘 생각해보면 다음값이 0이면 곱했을경우 0이 되니까 곱하면 안된다 무조건 +를 해야한다. 또한 1 일경우에도 곱했을경우 자기 자신이 나오므로 + 하는 경우가 더 값이 크다. 그러므로 해당 값들이 0으로 적혀있는지 1로 적혀 있는지 확인한다. 또한 처음 result에 넣은 값 역시 확인을 안했으므로 한번은 확인을 해줘야 한다 0 or 1일경우 result에 더하고 아닌경우 result에 곱해서 그 값을 다시 result 에 저장한다. s = input() result = int(s[0]) for i in range.. 2023. 8. 24. [이것이 코딩 테스트다] 모험가 길드 일단 리스트를 입력받았을때 정렬을 시켜야 한다 오름차순으로 정렬하면 맨 마지막 값이 가장 큰 값이 나오는데 이 값을 pop 한 후 변수에 저장하고그 값만큼 popleft를 한다(deque를 이용했다) deque 길이가 0이 될때 까지 이 행위를 반복한다. from collections import deque as dq n = int(input()) L = list(map(int,input().split())) L.sort() D=dq(L) result = 0 while len(D) != 0: a = L.pop() for i in range(a): if len(D) == 0: break D.popleft() result += 1 print(result) 교재는 다른 방식으로 풀었는데 교재 풀이가 더 나은거.. 2023. 8. 24. 플로이드 워샬 알고리즘 - python N개의 도시가 주어지고, 각 도시들을 연결하는 도로와 해당 도로를 통행하는 비용이 주어질 때 모든 도시에서 모든 도시로 이동하는데 쓰이는 비용의 최솟값을 구하는 프로그램을 작성하세요. ▣ 입력설명 첫 번째 줄에는 도시의 수 N(N 2023. 8. 5. 최대점수 구하기(냅색 알고리즘) - python 이번 정보올림피아드대회에서 좋은 성적을 내기 위하여 현수는 선생님이 주신 N개의 문제를 풀려고 합니다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩 니다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다. (해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.) ▣ 입력설명 첫 번째 줄에 문제의 개수N(1 2023. 8. 4. 동전교환 - python 다음과 같이 여러 단위의 동전들이 주어져 있을때 거스름돈을 가장 적은 수의 동전으로 교환 해주려면 어떻게 주면 되는가? 각 단위의 동전은 무한정 쓸 수 있다. ▣ 입력설명 첫 번째 줄에는 동전의 종류개수 N(1 2023. 8. 2. 가방문제(냅색 알고리즘) - python 최고 17kg의 무게를 저장할 수 있는 가방이 있다. 그리고 각각 3kg, 4kg, 7kg, 8kg, 9kg의 무게를 가진 5종류의 보석이 있다. 이 보석들의 가치는 각각 4, 5, 10, 11, 13이다. 이 보석을 가방에 담는데 17kg를 넘지 않으면서 최대의 가치가 되도록 하려면 어떻게 담아야 할까요? 각 종류별 보석의 개수는 무한이 많다. 한 종류의 보석을 여러 번 가방에 담을 수 있 다는 뜻입니다. ▣ 입력설명 첫 번째 줄은 보석 종류의 개수와 가방에 담을 수 있는 무게의 한계값이 주어진다. 두 번째 줄부터 각 보석의 무게와 가치가 주어진다. 가방의 저장무게는 1000kg을 넘지 않는다. 보석의 개수는 30개 이내이다. ▣ 출력설명 첫 번째 줄에 가방에 담을 수 있는 보석의 최대가치를 출력한다... 2023. 8. 2. 창고 정리(그리디) - python 창고에 상자가 가로방향으로 일렬로 쌓여 있습니다. 만약 가로의 길이가 7이라면 1열은 높이가 6으로 6개의 상자가 쌓여 있고, 2열은 3개의 상자, 3열은 9개의 상자가 쌓여 있 으며 높이는 9라고 읽는다. 창고 높이 조정은 가장 높은 곳에 상자를 가장 낮은 곳으로 이동하는 것을 말한다. 가장 높은 곳이나 가장 낮은 곳이 여러곳이면 그 중 아무거나 선택하면 된다. 위에 그림을 1회 높이 조정을 하면 다음과 같아진다. 창고의 가로 길이와 각 열의 상자 높이가 주어집니다. m회의 높이 조정을 한 후 가장 높은 곳 과 가장 낮은 곳의 차이를 출력하는 프로그램을 작성하세요. ▣ 입력설명 첫 번째 줄에 창고 가로의 길이인 자연수 L(1 2023. 7. 29. 씨름 선수(그리디) - python 현수는 씨름 감독입니다. 현수는 씨름 선수를 선발공고를 냈고, N명의 지원자가 지원을 했습 니다. 현수는 각 지원자의 키와 몸무게 정보를 알고 있습니다. 현수는 씨름 선수 선발 원칙을 다음과 같이 정했습니다. “다른 모든 지원자와 일대일 비교하여 키와 몸무게 중 적어도 하나는 크거나, 무거운 지원자 만 뽑기로 했습니다.” 만약 A라는 지원자보다 키도 크고 몸무게도 무거운 지원자가 존재한다면 A지원자는 탈락입니다. ▣ 입력설명 첫째 줄에 지원자의 수 N(5 2023. 7. 29. 회의실 배전(그리디) - python 한 개의 회의실이 있는데 이를 사용하고자 하는 n개의 회의들에 대하여 회의실 사용표를 만들 려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하 면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중 단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. ▣ 입력설명 첫째 줄에 회의의 수 n(1 2023. 7. 29. 알리바바와 40인의 도둑 - python 알리바바는 40인의 도둑으로부터 금화를 훔쳐 도망치고 있습니다. 알리바바는 도망치는 길에 평소에 잘 가지 않던 계곡의 돌다리로 도망가고자 한다. 계곡의 돌다리는 N×N개의 돌들로 구성되어 있다. 각 돌다리들은 높이가 서로 다릅니다. 해당 돌다리를 건널때 돌의 높이 만큼 에너지가 소비됩니다. 이동은 최단거리 이동을 합니다. 즉 현재 지점에서 오른쪽 또는 아래쪽으로만 이동해야 합니다. N*N의 계곡의 돌다리 격자정보가 주어지면 (1, 1)격자에서 (N, N)까지 가는데 드는 에너지의 최소량을 구하는 프로그램을 작성하세요. 만약 N=3이고, 계곡의 돌다리 격자 정보가 다음과 같다면 (1, 1)좌표에서 (3, 3)좌표까지 가는데 드는 최소 에너지는 3+2+3+4+2=14이다. ▣ 입력설명 첫 번째 줄에는 자연수.. 2023. 7. 28. 마구간 정하기(결정알고리즘) - python N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3, ......, xN의 좌표를 가지며, 마 구간간에 좌표가 중복되는 일은 없습니다. 현수는 C마리의 말을 가지고 있는데, 이 말들은 서로 가까이 있는 것을 좋아하지 않습니다. 각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 두 말의 거리가 최대가 되게 말을 마구간에 배치하고 싶습니다. C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대 값을 출력하는 프로그램을 작성하세요. ▣ 입력설명 첫 줄에 자연수 N(3 2023. 7. 27. 이전 1 2 3 4 5 6 7 8 다음 728x90