문제https://www.acmicpc.net/problem/20300 풀이가장 큰 값과 가장 작은 값을 취하면 되는 그리디 문제이다.정렬한다최대 근손실을 홀수면 가장 큰수를 pop해서 초기화하고 짝수면 0으로 초기화한다남은 수중 가장 큰 값, 가장 작은 값을 을 pop해서 더한 값이 최대 근손실보다 크면 교체한다남은 수가 없어질 때까지 3번을 반복한뒤 최대 근손실을 출력한다참 쉽죠? 정답 코드from collections import dequeN = int(input())M = list(map(int, input().split()))M.sort()M = deque(M)maxM = 0if len(M) % 2 != 0: maxM = M.pop()while len(M) > 0: m = M.p..
문제https://www.acmicpc.net/problem/1027 사고 과정처음에는 서로 보이는지 판단할 두 빌딩 사이의 모든 빌딩이 두 빌딩의 높이보다 낮은 경우를 구하면 되지 않을까 싶었다.하지만 이 그림과 같이 1, 3 두 빌딩 사이의 빌딩 2번은 3번보다 높은데도 불구하고 1과 3 빌딩은 서로를 볼 수 있어서 정답이 아니었다.두번째로 사이의 빌딩들의 제한높이를 두 빌딩 의 높이의 차이를 이용해 수동으로 구하는 방법을 생각했는데1과 4 사이의 높이 차이는 6이며 사이의 빌딩은 2개이므로 아래와 같이높이의 차이를 2개로 쪼개 3등분한 값을 더해가며 제한 높이를 수동으로 구하여 풀어보았는데이론상 정답인것 같으나 부동소숫점 연산의 부정확성 문제 추측되는 이유로 틀렸다. 풀이따라서 아래와 같이 두..
문제https://www.acmicpc.net/problem/9935 풀이문자열에서 폭발 문자열이 없어질때까지 반복해서 찾아 지워나간다면 이론적으로 풀리기야 하겠지만 시간이 초과된다. 스택을 이용하면 전체 문자열에서 폭발 문자열을 찾는데 소요되는 시간, 문자열에서 폭발문자열을 반복하며 도려내어 새로운 문자열을 만드는 시간을 단축하여 빠르게 해결이 가능하다. 문자열을 앞에서부터 한글자씩 끝까지 순회하며 스택에 push하면서 스택의 윗부분과 폭발 문자열이 일치한다면 폭발 문자열의 길이만큼 pop해주기만 하면 한번의 순회로 쉽게 해결이 가능하다. 정답 코드msg = input()bomb = list(input())answerStack = []for letter in msg: answerStack...
문제https://www.acmicpc.net/problem/1213 풀이팰린드롬 문자열을 구성하려면 문자중 단 하나만 홀수개 사용할 수 있으며 정 가운데 입력된다,이 외의 다른 문자들은 짝수개 존재해야 팰린드롬 문자열로 구성이 가능하다. 문자별 등장 횟수를 딕셔너리로 저장하고, 홀수번 등장하는 문자를 기록하고 알파벳 순서대로 정렬하여 짝수번 등장하는 문자의 절반을 출력, 홀수번 등장하는 문자 출력, 짝수번 등장하는 문자의 절반을 뒤집어 출력하여 회문을 완성한다.이때 홀수번 등장하는 문자가 1개를 초과하면 팰린드롬이 불가하므로 한수에게 사과를 전하자. 정답 코드from collections import defaultdicthansooEngName = input()alphaDict = default..
문제https://www.acmicpc.net/problem/17413 풀이조건이 약간 까다로운 단순 구현 문제다 0부터 인덱스를 증가해가며 문자열 끝까지 검사하되의 다음 인덱스까지 인덱스를 증가시키고 해당 범위를 정답 리스트에 추가하고공백이 나오면 인덱스를 1 증가하여 다음 인덱스를 가리키고 공백을 정답 리스트에 추가하고그 밖의 다른게 나오면 문자나 숫자이므로 문자열의 끝을 만나거나 문자나 숫자가 아닐때까지 인덱스를 증가시키고 해당 범위를 뒤집어 정답 리스트에 추가하고정답 리스트를 join해서 출력하면 된다. 파이썬에서 "문자열[::-1]"을 통해 문자열을 쉽게 뒤집을 수 있다.::로 모든 문자열을 -1 만큼의 증가폭을 가지고 출력하므로 뒤집힌다파이썬에서 문자인지 검사할땐 isalpha(), 숫자인..
문제https://www.acmicpc.net/problem/4659 풀이단순하게 주어진 조건을 검사하여 출력하면 된다. 로직은 다음과 같다단어의 판정 결과를 저장할 isAcceptable 변수를 False로 초기화한다.연속된 자음과 모음을 세는 카운터 변수를 만들고 0으로 초기화한다 단어를 글쇠별로 하나씩 끝까지 검사하는데글쇠가 모음에 해당되면 모음 카운터를 증가시키며 자음 카운터를 0으로 초기화 하고, 글쇠가 자음에 해당되면 자음 카운터를 증가시키고 모음 카운터를 0으로 초기화 시킨다.모음은 최소 한개 이상 존재해야 하기 때문에 모음 카운터를 증가할땐 isAcceptable에 True를 저장한다.카운터가 3 이상이거나 e,o가 아닌 문자가 연속으로 2회 등장시 isAcceptable를 False..