문제두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.입력첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.출력첫째 줄에 다음 세 가지 중 하나를 출력한다.A가 B보다 큰 경우에는 '>'를 출력한다.A가 B보다 작은 경
문제연도가 주어졌을 때, 윤년이면 1, 아니면 0을 출력하는 프로그램을 작성하시오.윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.예를 들어, 2012년은 4의 배수이면서 100의 배수가 아니라서 윤년이다. 1900년은 100의 배
0보다 크거나 같고, 99보다 작거나 같은 정수가 주어질 때 다음과 같은 연산을 할 수 있다. 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000
세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427
정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오.Python 2, Python 3, PyPy, PyPy3: def solve(a: list) -> inta: 합을 구해야 하는 정수 n개가 저장되어 있는 리스트 (0 ≤ ai ≤ 1,000,000, 1 ≤
자연수 N이 주어졌을 때, 1부터 N까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.첫째 줄부터 N번째 줄 까지 차례대로 출력한다.
자연수 N이 주어졌을 때, N부터 1까지 한 줄에 하나씩 출력하는 프로그램을 작성하시오.첫째 줄에 100,000보다 작거나 같은 자연수 N이 주어진다.첫째 줄부터 N번째 줄 까지 차례대로 출력한다.2741번과 세트문제
세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M\*100으로 고쳤다.예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면
wow..알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며
N개의 숫자가 공백 없이 쓰여있다. 이 숫자를 모두 합해서 출력하는 프로그램을 작성하시오.첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.입력으로 주어진 숫자 N개의 합을 출력한다.공백없이 입력받고, list로
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다. S에는 QR Code "alphanumeric" 문자만 들어있다.
월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 인건비 등 총 B만원의 가변 비용이 든다고 한다.예를 들어 A=1,000, B=
자신의 층을 기준으로 '아래층의 1호부터 n호까지 사람들의 수를 합한 만큼의 사람을 데려와야 한다'라는 조건에 재귀함수를 생각했다.따라서 함수 floor를 선언해 테스트케이스 수 만큼 반복 호출하도록 하였다.그러나 백준에서는 재귀함수 사용 시 시간초과가 나는 경우가 많
문제 나의 답안
문제 나의 답안
첫번째와는 다르게 list를 제거해주었다.그래도 오류가 발생했다.no변수를 반복문 안에서 초기화해주었다.실수를 한 게 n2를 순차적으로 접근하면서 현재 접근한 숫자가 소수가 아니면no에 1을 더해 no가 0이 아니게 만들어 소수를 판별하도록 했다.여기서 실수를 한 것이
왜 첫번째 답안이 틀렸는지 모르겠다.그냥 반복문을 한번에 돌리는 대신 별도로 선언해 입력 받도록 수정하였다.
봉지 개수를 최소화하기 위해5의 배수를 만들 때까지 n을 3으로 빼주었다.3으로 뺀 후 총 봉지 개수(total)에 1을 더해주었다.그리고 5의 배수가 되면 n을 5로 나눈 몫을 구하고, 이를 봉지 개수에 더해주고 while문을 종료했다.마지막으로 n-=3을 거치고 n
2부터 입력받은 숫자까지(n+1) 반복문을 돌리면서 나눠지는 소수, 즉 소인수를 구한다.(i)나눠지면 해당 숫자를 출력하고, n을 나눈 숫자로 초기화해주고 반복문을 빠져나온다.이후, 다시 반복문을 돌려 초기화해준 n에 대해 다시 위 과정을 반복해준다.n이 더이상 나눠지
https://velog.io/@yj_lee/%EB%B0%B1%EC%A4%80-1978%EB%B2%88-%EC%86%8C%EC%88%98-%EC%B0%BE%EA%B8%B0이전에 풀었던 소수 문제를 응용하는 문제이다.첫번째 반복문으로 입력받은 범위를 지정하고,
https://www.acmicpc.net/problem/4673setNum의 범위를 잘못 지정했다.출력 형식을 잘못했다는 것을 알게되었다.인자를 하나하나 출력해주어야 한다.생성자가 없는 숫자를 셀프넘버라고 한다. 이를 구해서 출력해주어야 한다.우선, 생성자를
if문 문제이다.
테스트케이스 수만큼 ox결과를 입력받는다.입력받은 문자열은 list 함수를 이용해 문자로 분리해주었다.해당 문자열이 O라면 count에 c를 더해준다. c는 문자열이 x라면 X로 초기화해주고, O라면 1씩 증가시켜 연속된 O의 개수를 구할 수 있도록 한다.
(1)의 반복문은 테스트케이스 개수만큼 반복한다.이후 li에 학생의 수와 그 수의 점수를 입력받는다.변수 c는 평균을 넘는 학생의 수를 저장하기 위한 변수이다.(2)의 반복문은 리스트에서 학생의 수를 제외한 점수 인자(j)에 접근한다.이후 점수 한줄의 평균을 구하고j가
달팽이는 하루 a-b만큼 이동한다.정상 도달이후에는 추락하지 않으므로 v-a만큼 이동한다.(정상에 도달하기 전 낮에 이동한 a, 밤에 이동하는 것을 고려하지 않아도 됨)예시를 살펴보면, v에 도달하기까지 (a-b)가 날짜 수만큼 반복 되고, a만큼 이동하는 것을 알 수
문제 나의 답안 map함수를 이용해 한줄에 두개의 값을 입력받고, format함수를 사용해 출력해주었다.
문제 나의 답안 11021번과 세트 문제이다.
배열-반복문 공백을 포함하여 출력하려면 end=' '를 해주면 된다.
a는 정수 입력을 총 10번 받는다.입력 받은 a에 대해 i%42를 구해 42에 대한 나머지를 구한후, 빈 배열인 div에 추가해준다.중복 제거를 위해 set을(집합) 사용하고, set의 길이를 출력해주어 서로 다른 나머지의 개수를 구해준다.
출력을 대문자로 해야하고, 소문자와 대문자를 구분하지 않으므로 upper()함수를 사용해 입력받은 문자열을 대문자로 변환해준다.각 문자의 개수를 구하기 위해 set()으로 중복을 제거해준다.반복문을 통해 입력받은 문자열에 대해, count()로 2.의 문자가 몇개 존재
클릭 시 해당 문제로 이동input()으로 문자열을 입력받는다.split()으로 공백 기준으로 문자열을 분리하면 리스트에 저장된다. 리스트의 길이를 구해주면 되므로, len을 사용한다.
reversed는 list에서 제공하는 함수인 reverse와 다르게 list에서 제공하는 함수가 아니다.reversed는 reversed 객체를 반환하므로, list로 사용하려면 list(reversed())tuple로 사용하려면 tuple(reversed())key
각 다이얼에 맞춰 num배열을 생성해준다.time은 다이얼을 돌릴 때마다 초기화되므로 0으로 초기화해준다.첫번째 반복문에선 입력 받은 문자열을 순서대로 접근한다.두번째 반복문에선 num배열을 순서대로 접근한다.조건문에선 알파벳 배열에 입력 받은 문자가 존재하는지 검사하
단어의 개수를 입력해주고, 그 수만큼 문자열을 입력받아준다(li)그룹 단어의 개수를 세는 변수 c는 단어 수만큼 초기화해준다. 모든 단어가 그룹단어라고 가정한 후 아닌 단어를 제외해줄 것이므로, 0이 아닌 단어 수로 초기화해준다.1번에서 입력받은 여러 문자열을 분리해준
오답 요인: m이 44보다 크다면 시간의 값은 바뀔 필요가 없는데 -1를 해주었다.(부끄러운.. 답안)해당 부분을 수정하였다.m을 기준으로 생각하면 쉽다.1\. m이 44보다 크다면 시간은 바뀔 필요가 없으므로 45만 빼준다.2\. 45보다 작으면, 시간이 1시간 줄어
반복문에서 1보다 크고 n보다 작거나 같은 한수의 개수를 구해야한다.숫자를 각 자리수로 분리해준다.숫자가 100보다 작을 때는 등차수열을 이루므로 해당 수는 무조건 한수이다.100보다 크면 첫째 자리수(a0)에서 둘째 자리수(a1)를 빼주고 이 값이 둘째 자리수(a1)
문자열에 곱하기를 해주면 곱한만큼 출력이 가능하다.
이전 문제에서 더 발전된 문제, format함수를 사용하여 출력해준다.
단어를 알파벳 순으로 정렬해주는 것을 빼먹었다.반복문을 통해 n번 입력 받고, 이를 배열에 추가해준다.그 후 배열에서 중복을 제거해주기 위해 set을 사용하고, sort함수를 사용할 것이므로 list로 만들어준다.단어를 알파벳으로 정렬해주기 위해 sort()를 파라미터
a와 b를 입력 받는다.약수를 계산하는 cal 함수를 정의해준다. 반복문을 통해 인자로 들어온 숫자의 약수를 구해주고, 배열에 저장해 배열을 리턴해준다.gon은 a의 약수와 b의 약수 중 같은 값을 갖는 것을 반환해준다. 공약수란 공통된 약수이다.gon 중 최대인 값이
이진 탐색 문제이다. 재귀로 풀어주었다.1\. 이진탐색 함수를 정의해준다.함수의 인자는 검사할 배열(두번째)의 값, 시작 인덱스, 끝 인덱스 값을 받는다.우선 가운데 인덱스를 구해준다. 이를 k로 한다.만약 첫번째 배열의 값과 두번째 배열의 값이 같다면 1을 반환해준다
여러개를 입력받기 위해(정해지지 x) while문을 사용한다.0이 입력되면 while문을 종료한다.아니라면, 문자열을 검사해준다.3-1. 만약 문자열을 반전시킨 값이 원래의 문자열과 같다면 yes를 출력한다. 문자열 인덱스 슬라이싱을 사용해준다. ::-1은 문자열의 첫
스택 문제이다. 스택은 FILO(First In Last Out) 구조이다. pop을 통해 가장 마지막 값을 뺄 수 있으며, push를 통해 값을 추가할 수 있다.1\. 반복문을 통해 k개수만큼의 입력값을 받는다.2\. 만약 n이 0이면 스택에서 마지막 인자를 제거한다
채점결과 시간초과가 떴다.시간초과를 피하려고 pop과 top에서 empty를 호출하는 것도 피했는데입출력 속도를 고려하지 못했다.코드는 단순하다. 각 기능 별로 함수를 정의해 사용해주면된다.1\. push함수는 함수의 인자로 추가할 값을 받는다. 해당 값을 스택에 ap
힌트에 정렬이 제시되어 있으나, 정렬하지 않고 접근하였다. 그리디 알고리즘 문제 1\. a배열에서 가장 작은 값과, b배열에서의 가장 큰 값을 곱해주면 s의 값을 작게 만들 수 있다. s+=min(al)\*max(bl)2\. 따라서 mn에는 a 배열에서 가장 작은 값을
문제 나의 첫번째 답안 reversed로 리스트를 반전해주어 사용했다. 오답이 떴다. 오름차순이라는 조건 때문인가 싶어(리스트를 변형해서 그런가) 사용하지 않기로 하였다. 나의 두번째 답안 reversed를 사용하지 않고, 반복문을 반대로 하여서 제출하였다.
에라토스테네스의 체(소수 구하기) 문제이다.1은 소수가 아니므로 제외해준다.반복문을 돌린다. 범위는 2부터 int(i\*\*0.5)+1까지이다. 특정 수의 제곱근을 구해, 그 제곱근까지의 약수를 구하면 해당 약수를 포함하는 수를 모두 제거할 수 있다(소수가 아니기에).
완전 탐색 문제이다.완전 탐색이란, 모든 경우의 수를 전부 탐색하는 것으로 예외가 존재하지 않는 탐색이다.브루트 포스는 완전 탐색 중 비선형 구조를 가지는 너비 우선 탐색 문제로, 문제를 선형 구조화 시켜 접근한다.3장의 카드를 뽑기 때문에 삼중 반복문을 사용한다.따라
팩토리얼을 사용해서 풀면된다.팩토리얼을 재귀함수로 선언, n이 0일때까지 반복해준다.이항계수가 무엇인지 알면 쉽게 접근할 수 있는 문제이다.이항계수란 n개에 대해 k개의 숫자를 뽑는 것이다.이를 수식으로 정리하면 다음과 같다.
시간의 최솟값을 출력하기 위해 sort로 정렬을 해준다.(앞에서 시간이 오래걸릴수록 뒷사람이 기다리는 시간은 길어짐)반복문을 통해 한사람씩 순서대로 구해준다. 두번째 반복문의 범위를 i+1로 설정해주면서 앞사람의 시간 값을 계속 더해주도록 한다. (2번 사람의 소요 시
크로아티아 알파벳은 2글자 또는 3글자로 이루어져 있으므로 이를 한 글자로 변환하고 문자열의 길이를 세주면 된다.1\. 변경된 크로아티아 알파벳을 배열(sli)로 저장해두고 접근한다.2\. 반복문으로 sli를 하나하나 접근한다.3\. 기존 문자열에 알파벳이 존재하면 r
반복문을 통해 n번 입력받는다. 나이는 int형으로 변환해주고 빈 배열에(li) 이를 추가해준다.(2차원 배열)배열을 정렬해주는데, lambda식을 사용해 age(li0)를 기준으로 정렬해준다.반복문을 통해 값을 출력해준다.
접근 방법마이너스(-)가 나오기 전까지 식의 값은 최소가 될 수 없다.따라서 마이너스가 나오기 전까지 모든 값을 더해주고, 마이너스가 나온 후에는 나머지 모든 숫자를 빼주면 된다.split로 -를 기준으로 식(s)을 분리해준다. (ex. 50+50+60-10+50 '5
10814번과 유사한 문제이다.x와 y를 입력받는다. lambda를 이용해 x값과 y값에 따라 정렬해준다. x값(li0)으로 정렬한 후, y값(li1)으로 정렬한다.반복문으로 해당 배열을 출력한다.
11650번과 유사한 문제이다.x와 y를 입력받는다. lambda를 이용해 y값과 x값에 따라 정렬해준다. y값(li1)으로 정렬한 후, x값(li0)으로 정렬한다.반복문으로 해당 배열을 출력한다.11650번에 대해 다른 사람의 풀이를 보니, 시간을 줄이기 위해 sys
접근방법"회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다" "회의의 시작시간과 끝나는 시간이 같을 수도 있다"위와같은 조건에 따라, 중복을 허용한다.(ex 시작하는 시간:1, 끝나는 시간: 1) 따라서 시작 시간
파이썬 내장함수인 sorted를 사용해서 풀어주었다.(sort도 가능하다. sort는 원 배열까지 수정, sorted는 원배열 값에 영향을 끼치지 않는다.)합병정렬로 풀었는데 첫 제출에선 틀렸다.(j를 i로 잘못썼다..ㅎ)합병정렬은 분할 정복 방식으로, 배열을 반으로
서브태스크 문제는 처음이다.채점 기준이 존재한다.접근 방법가격을 최소화하기 위해, 가장 싼 곳에서 가장 많이 구매해야한다. 따라서 가격의 최솟값을 찾아야 한다.가장 싼 곳에서 가야할 km만큼의 기름을 구매한다. 이를 비용에 더해주면 된다.minPrice에는 임의의 가격
정렬 문제이다.처음에는 각 문자열을 분리 후 최댓값을 비교하여 풀려고 하였으나 내장함수를 사용하는 것이 효율적일 것 같아 sorted를 사용해주었다.반복문으로 문자열의 각 문자에 접근해주고, 빈 배열(sl)을 만들어 해당 문자들을 삽입해준다.이후 sl을 sorted로
큰 잔돈을 먼저 제외해주어야 한다.그리디 문제이다.1000에서 지출할 돈을 빼준다(n)잔돈의 개수(count), 잔돈 종류의 배열(coin)을 선언한다.잔돈 종류에 대해 반복문을 돌린다. 만약 n이 0보다 크다면 계속 반복해준다.n//i로 잔돈의 개수를 구해주고, n=
구현 자체는 스택문제와 유사하다.다만 LIFO인 스택과 달리 큐는 FIFO구조로 먼저 들어온 것이 제일 먼저 나간다.push함수는 함수의 인자로 추가할 값을 받는다. 해당 값을 큐에 append해준다.pop함수는 큐가 비어있지 않으면, 가장 앞의 값을 큐에서 제거한다.
접근 방법'(' 와 ')'이 한 쌍을 이루어야 괄호 문자열이 된다.따라서, '(' 와 ')'의 개수가 일치해야 한다.'(' 가 나오면 이를 배열에 append해주고')'라면 쌍을 이루는지 여부에 따라 pop해주거나, append해주면 된다.배열의 길이가 0이라면 문자열
최종 print문에서 출력 실수가 있었다.(소문자를 대문자로 출력함)접근방법9012번 괄호 문제와 유사한 문제이다. 대괄호(])라는 조건을 하나 더 추가해주면 된다.반복입력 받고, .을 만나면 종료하므로 while문을 사용한다.입출력 시간을 감소시키기 위해 import
접근 방법각 벌집의 개수는 6의 배수만큼 변화한다. 즉, 한 층마다 6, 6x2, 6x3, ... 으로 증가한다.따라서 입력받은 수가 얼마만큼의 배수를 지나는지 구해주면 된다.문제 조건에서 시작을 포함하므로 벌집 개수의 초기값은 1이 된다(count=1)시작을 포함하므
접근 방법1부터 입력받은 자연수까지 숫자를 순차대로 늘리면서 누적합을 구해준다.누적합을 구하다가 s보다 값이 같거나 커지면 초과하기 이전의 count값을 출력해주면 된다.누적합을 구할 result는 0으로, count로 횟수 즉 n의 최대값을 구한다. count는 0으
접근방법모든 경우를 비교해주면 된다.자신보다 덩치가 큰 사람이 나오면 자신의 순위를 하나 증가시키면서 순위를 구해준다.첫번째 반복문에서 몸무게와 키를 입력받는다.두번째 반복문에서 이중 반복문을 통해 순위 비교를 해준다.rank를 1로 초기화해주고, if i\[0]<
접근방법k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다 라는 조건에 따라 작은 중량을 드는 로프가 최대 무게를 결정함을 알 수 있다.10의 로프는 15만큼의 중량을 버틸 수 없기 때문이다.따라서 최
접근 방법그리디 알고리즘 문제이므로 순서대로 최적의 값을 갖는 것을 택해주면 된다. 최소 버튼 출력이므로 큰 버튼 값부터 계산a, b 버튼은 분을 초로 변환해주어서 계산해준다.입력받은 시간을 10으로 나눴을 때의 나머지가 0이 아니라면, 버튼으로 시간을 정확히 맞출 수
접근방법변화하는 것변화할 위치를 발견했을 때 한번 더함, 해당 위치 종료 후에 한번 더 숫자가 변함뒤집는 것연속된 숫자는 한번에 뒤집으므로, 연속된 숫자라면 각 위치마다 매번 뒤집는 횟수를 구할 필요 없음 (0001100는 변화는 2번(0->1에서 1번 | 1->0에
접근 방법약수에는 곱해서 원래의 숫자가 나오는 쌍이 있다.따라서 N의 약수 중, 최댓값과 최솟값을 곱하면 N을 구할 수 있다.약수의 개수인 n을 입력받는다.N의 약수를 입력받고, 이를 sort로 오름차순으로 정렬해준다.가장 작은 값(arr0)과, 가장 큰 값(arr-1
문제를 이해하는데 오래걸렸다.접근방법문제에서 '스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자' 라고 하였으므로 입력하려는 수보다 큰 수가 스택 안에 존재하면 안된다.또한 해당조건에 따라, 4가 입력되려면 4보다 작은 1, 2, 3이 전부 스택안에 저
접근방법문제에서 30의 배수가 되는 가장 큰 수를 만들고 싶어한다 라고 하였으므로, 내림차순으로 정렬이 필요하다.30의 배수는 3의 배수이면서 일의 자리가 0인 수이다.3의 배수는 각 자리 숫자의 합이 3의 배수인 수이다.0이 없을 경우, 0이 있으나 3의 배수가 아닌
접근 방법가장 작은 생성자를 구하는 문제이므로 자연수 1부터 입력받은 수(n)까지 반복문을 돌리면서, 생성자(i)를 구해준다.분해합이 입력값과 같을 때, 생성자가 없을 때 두 조건에 따라 출력해준다.반복문에서 생성자 i에 대해, arr로 각 자리의 값을 저장한다.tot
접근 방법다시 칠해야 하는 경우하나는 맨 왼쪽 위 칸이 흰색인 경우하나는 검은색인 경우변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다문제 조건에 따라, 8×8 크기의 체스판으로 잘라내야 함행과 열의 인덱스의 합계가 짝수면 처음 색과 같아야, 홀수면 달라
접근방법하노이탑 알고리즘, 재귀 문제이다.장대는 총 3개이고, 모든 원판을 첫번째에서 마지막으로 옮기면 된다.따라서 3단계로 나뉜다1) 첫번째 장대에서 가장 아래에 있는 원판을 제외하고 나머지(n-1개)를 2번째로 이동시킨다.2) 이후 첫번째 장대에서 가장 아래에 있는
문제 나의 답안 접근방법 N번째 영화의 제목은 세상의 종말 (N번째로 작은 종말의 숫자) 와 같다. 라는 조건에 따라 666이 들어가는 숫자마다 번호를 붙여준다고 생각하면 된다. 666부터 계속 숫자를 증가시키면서 입력받은 숫자에 도달할 때까지 반복해준다. n을 입력받고, num을 666으로 초기화, 몇번째 종말의 숫자인지 세는 cnt를 선언해준다....
접근방법어려운 문제라기 보단 따옴표 등 출력 형식에 신경 쓸 게 있어서 꼼꼼히 살펴보아야 하는 문제이다.증가하는 '\_\_\_\_' 을 제외하고 나머지 문자열은 똑같이 출력되므로 증가하는 해당 부분만 변화시켜주면 된다.밑줄친 부분은 입력 수와 상관없이 한번만 출력된다.
접근 방법문제에서 주목해야 할 부분은 다음과 같다첫 번째 라운드에서는 동전에 표시된 값들의 합이 최대가 되도록 뒤집어야 하고두 번째 라운드에서는 동전에 표시된 값들의 합이 최소가 되도록 뒤집어야 한다플레이어의 점수 : (첫 번째 라운드 동전 값의 합) - (두 번째 라
접근방법두 문자열의 길이를 일치시키는 것이 핵심이다.길이를 일치시킨 후 두 문자열이 같은지 아닌지에 따라 출력해주면 된다.문자열을 입력받고 len으로 문자열의 길이를 구한다.두 문자열의 길이를 일치시키기 위해 s문자열에 t문자열의 길이(tlen)을 곱해주고, 반대도 마
접근방법직사각형의 경계선만 닿으면 되기때문에 직사각형의 영역인 (0,0)~(w,h) 영역안에서 고려하면 된다.직사각형의 영역안에서 x,y,w-x,h-y를 중 최소값을 구해주면 된다.
접근 방법현재 인덱스는 배열의 전체길이를 넘으면 안되므로(오류남), 새로운 값을 찾기 위해 나머지로 인덱스의 위치조정할 필요가 있다.k번째 값을 삭제하기 위해, k번째에 해당하는 인덱스를 계산해 값을 찾는다.k번째 값을 삭제하기 전, tem변수에 k번째 값을 저장한다.
접근방법DP문제이므로, 규칙을 찾는 것이 중요하다.4와 5의 경우를 보면 각 n의 개수는 첫번째 전 합+두번째 전 합+세번째 전 합을 이루는 것을 알 수 있다.즉, dpn=dpn-1+dpn-1+dpn-3문제조건에 정수 n이 주어진다. n은 양수이며 11보다 작으므로,
접근방법두 원의 위치관계를 알아야 한다.두 원의 접점의 개수를 알아내면 구할 수 있는 문제이다.두 원의 중심사이 거리 공식, 즉 두 점 사이 거리 공식을 알아야 한다.두 점 사이 거리 공식$\\overline{AB} = \\sqrt{(x_2-x_1)^2+(y_2-y_1
접근 방법파이썬의 덱 모듈을 사용하는 방법을 알면 쉽게 풀 수 있는 문제이다.덱이란? 해당 글을 참고하여 공부하였다.이전에 풀었던 스택(https://velog.io/@yj_lee/%EB%B0%B1%EC%A4%80-10828%EB%B2%88-%EC%8A%A4%
접근방법10같은 경우에는 10 -> 9 -> 3 -> 1 또는, 10 -> 5 -> 4 -> 2 -> 1 으로 계산될 수 있으나 전자가 이동횟수가 더 적다.세 경우에서, 2와 3으로 나뉘지 않는 경우에선 -1을 해주어야 한다.나뉜다면 -1을 굳이 할 필요없으므로(나누는
m_pr = \[i for i in range(n)]를 0부터 n까지로 초기화하였다.접근 방법m번째 문서가 몇번째에 인쇄되는지를 구하는 문제이다.문제 2의 조건에 따라, 중요도의 첫번째 인덱스 값이 최대값이 될 때까지 나머지 값을 맨 뒤로 보내주어야 한다.문서의 인덱스
접근 방법이분탐색 문제이다. 파이썬의 딕셔너리를 사용해서 구현할 수 있다.각 카드의 숫자를 key로, 해당 카드의 개수를 value로 저장하면 된다.이후 찾을 카드에 해당하면 value를 출력해주면 된다.
접근 방법정문으로부터 걷는 거리가 가장 짧도록 방을 배정직사각형, W 개의 방이 있는 H 층 건물세로로 배치됨을 알 수 있다. 따라서 층수는 손님을 높이로 나눈 나머지이고, 방은 몇 번째 손님을 높이로 나눈 몫에 1을 더해주면 구할 수 있다.만약 n번째 손님과 건물의
접근 방법이분탐색 문제이므로 중간 값(mid)을 구해주면 된다.자른 나무의 합이(t) 가져가야 할 길이(m)보다 큰지, 작은지에 따라 조건문을 설정해 줘야 한다.만약 크다면 절단기의 시작 위치를(start)를 높여 필요한 만큼만 가져간다.작다면 절단기의 끝 위치(end
접근 방법나무 자르기 문제와 거의 동일하다랜선의 개수보다 많으면 랜선의 최소 길이를 증가시키고, 랜선의 수보다 작으면 최대 길이를 감소한다.
최소 간격(mn)을 배열의 첫번째 값과 두번째 값의 차이로 하면 실제 최소 간격이 이와 다를 수 있으므로 옳지 않다. 따라서 최소 간격을 1로 설정해주고 순차적으로 늘려주어야 한다.접근 방법이진 탐색 문제이다.특정 간격을 기준으로 중간간격을 계산하여 공유기를 설치해야
접근 방법숫자 카드2 문제와 동일하게 이진탐색 문제이나, 딕셔너리를 사용해 풀었다.없으면 0 있으면 1을 저장해야 하므로 딕셔너리의 value를 0으로 초기화 해주고, arr_n에 있다면 1을 증가시켜준다.출력할 때에는 딕셔너리에 value를 출력하기 위해 dic.va
DFS와 BFS의 기본 구현을 묻는 문제이다.DFS는 깊이우선탐색으로 모든 노드를 방문하고, 스택이나 재귀함수로 구현한다.BFS는 너비우선탐색으로 두 노드 사이 최단 경로를 방문하며 큐로 구현한다.
접근 방법음계를 입력받고, 리스트로 저장한다.해당 리스트가 정렬되어 있는지, 아닌지에따라 출력 결과를 다르게 해준다.
0 0을 입력받을 때까지 반복해주고, 입력에 따른 조건을 설정해주면 된다.
문제 나의 답안 접근 방법 | | | | | | |---------------|----------|----------|----------|----------| | NUMBER | 0 | 1 | 2 | 3 ...
시간 초과라는 결과가 나왔다.반복문이 여러개이고, 입출력이 계속 일어나므로 sys.stdin.readline로 입출력 시간을 단축해주어야 한다.접근 방법최댓값 구하는 방식과 비슷하게 접근할 수 있다.(그리디 문제)1등은 무조건 뽑힌다. 따라서 각 분야의 1등을 기준으로
접근 방법각 조건에 따라 분류해주면 된다.3개의 숫자 중 최댓값은 max로 구해주면 된다.
접근 방법c에 대해 시간과 분을 계산해주고 a와 b에 각각 더해준다.분이 60보다 같거나 클 때와 시간이 24 이상일 때를 조건문으로 처리해주어야 한다.
문제 나의 첫번째 답안 해당 코드에서 예산이 같을 때는 mx값을 줄일 필요가 없으므로 조건문을 수정해주어야 했다. 나의 답안 접근 방법 이분탐색 문제이다. 상한액보다 낮은 금액은 모두 배정이 가능하며 상한액을 넘는 금액에 대해서는 상한액까지만 배정하도록 한다. 따라서 조건을 두개로 나누어 주어야 한다. 예산의 합이 국가예산의 총액을 초과하는지 아닌지...
접근 방법문제에서 산술평균은 반올림을 해주어야 하므로, round를 사용해주어야 한다.중앙값을 구하기 위해 입력받은 숫자를 정렬해주어야 한다.최빈값을 구하기 위해 딕셔너리를 사용해주었다. 딕셔너리를 사용해 각 숫자의 빈도를 구해준다.그리고 빈도 중 최댓값(최빈값)을 갖
접근 방법문제를 풀 때에는 a를 b로 만들기보단(bottom up) b를 a로 만들기(top-down)으로 접근해주어야 한다.따라서 2를 곱한다. -> 2로 나눠지면 2로 나눔1을 수의 가장 오른쪽에 추가한다. -> 1의 자리가 1이면 1을 제거b를 a로 만들 수 없으
문제 나의 답안 접근 방법 경우의 수는 n이 1일 때 1가지 n이 2일 때 2가지 n이 3일 때 3가지 n이 4일 때 5가지 이다. 위의 경우의 수에서 arr[n]=arr[n-1]+arr[n-2] 라는 점화식을 도출해 낼 수 있다.
다음 과제를 고려해주어야 한다고 생각해 두번째 반복문에서 1부터 n까지 반복하도록 하였다.그러나 이렇게 하면 첫번째 과제를 고려하지 못하므로 반복문을 0부터 n까지로 설정해주어야 한다.접근 방법마감시간이 늦은 순서대로 나중에 해도 됨과제의 마감일(e)이 시작해야 되는
접근 방법l=5, p=8, v=20인 경우 최대 8일동안 이용할 수 있으며 5일 동안 이용가능하다.즉 8일 중 5일을 사용하고 3일은 사용하지 못한다.따라서 총 휴가기간 20일(v) 동안 5일(l)씩 2번(v//p, 총 10일), 남은 4일(v%p)을 포함하여 총 14
접근 방법이항계수 문제이다 서쪽 사이트의 개수만큼 다리를 만들어야 하므로 $mCn$으로 접근할 수 있다.재귀함수를 이용해서 풀어주었다.
접근 방법 input=sys.stdin.readline을 사용할 줄 아는지 묻는 문제이다.
접근 방법 dp문제이므로 계단의 수만큼 미리 초기화를 해주었다.마지막 칸은 반드시 밟아야 하므로 시작을 고려하는 것이 아니라 뒤쪽 계단에서 어떻게 올라왔는지 고려하면 된다.1칸, 2칸씩 오를 수 있으나 연속해서 3칸은 불가하므로 현재까지의 가중치 = max(2칸 전까
문제 나의 답안 접근 방법 dp문제이다. dp문제에선 배열을 필요한만큼 미리 초기화해주어야 한다.(값을 저장해놓아야 하기 때문) a,b,c가 20보다 크다면 w(20,20,20)으로 값이 일정해지므로 0부터 20까지 3차원 배열을 선언해준다. 나머지 부분은 문제에
접근 방법배낭 문제이다. dp로 풀어주어야 한다.무게와 가치를 모두 고려해주어야 한다. 현재 가치가 가장 좋더라도 후에 더 좋은 가치를 갖는 물건이 나올 수 있으므로 담을지 말지를 고민해야 한다.물건의 무게(w)가 수용 가능한 무게(k)보다 크면 담을 수 없고, 아니라
접근 방법 최소값은 6이 5가 될 때, 최댓값은 5가 6이 될 때이다.문자열을 입력받고 replace를 이용해 숫자를 바꿔주면 된다.
접근 방법센트로 입력받기 때문에 각 단위에 \*100을 해주어 구해주면 된다.각 숫자로 나누어 목을 구하고 해당 몫만큼 곱해준 가격을 c에서 빼주면 된다.
접근 방법 면적 당 사람의 수를 구해주면 되므로 l\*p를 구해주고, 입력받은 사람의 수와의 차를 구해주면 된다.
접근 방법 1번 컴퓨터부터 접근하므로 n+1개의 노드를 갖는 그래프를 생성한다.이후 반복문을 통해 각 쌍을 연결하는 간선을 생성해준다.방문한 노드는 1로 저장하고, 아닌 노드는 0으로 간주한다.dfs 함수에선 방문한 노드인지 판별해주고, 방문한 노드의 수를 반환해준다
접근 방법dfs 문제이므로 재귀로 풀어주었다.dfs함수를 정의해 방문한 지점은 0으로 바꿔 다시 방문하지 않도록 해 단지 별 가구의 수를 세어준다.방문했던 곳을 기준으로 상하좌우 탐색을 반복하고, 만약 집이 있다면 탐색을 지속하고 True를 반환한다.count 배열에는
접근 방법그리디 문제이다.최댓값을 구하는 방식으로 가장 높은 봉우리를 찾으면 최댓값을 변경해주면 된다오른쪽으로만 진행하므로 자신보다 큰 봉우리가 나오기 전까지 cnt를 1씩 늘려주면 된다.
접근 방법bfs로 풀고자 deque를 사용하였다.배추가 있는 곳은 1로, 없는 곳은 0으로 표기하고 탐색 후 1을 0으로 변경해준다.bfs이므로 y값을 기준으로 가로로 탐색하기 때문에 배추가 있는 곳은 arry가 된다.가로\*세로가 $$m \\times n$$ 범위
접근 방법1번(q.popleft()) 2번(q.append(q.popleft())) 3번q.appendleft(q.pop())을 구현해주면 된다.모든 숫자를 찾을 때까지 반복해주어야 하고, 각 숫자에서 오른쪽(또는 왼쪽으로) 반복해서 이동해주어야 하므로 arr안에 총
접근 방법큐를 사용할 때 덱을 사용해주면 시간을 단축할 수 있다.덱 구현은 다음과 같다. 덱덱을 사용하지 않은 큐는 다음과 같이 구현한다. 큐다만 덱큐를 사용하면 pop 시 que.pop(0) 대신 popleft함수를 제공해주기 때문에 해당 함수를 사용해주면 된다.
접근 방법1번 집의 색은 2번 집의 색과 같지 않아야 한다.N번 집의 색은 N-1번 집의 색과 같지 않아야 한다.i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.라는 조건에 따라 색상이 중복되면 안된다.dp문제이므로 arr라는 배
접근 방법 작은 수 순서대로 정렬한 후 인덱스 값을 개수로 센다.다만, 이렇게 하면 같은 숫자가 있을 경우 값이 커지게 되므로 중복을 제거해주어야 한다.딕셔너리를 생성해 준 후 입력받은 숫자에 해당하는 value값을 반환해준다.
메모리 초과라는 결과가 나왔다.https://www.acmicpc.net/board/view/72658 해당 링크의 답변을 참고하여 수정하였다.파이썬의 정수형이 고정 메모리가 아니라는 것을 알게 되었다. 접근 방법 2xn 타일링 문제와 유사하게 피보나치 수열
접근 방법 문제에 제시된 것에 따르면 수열 p(n)은 p(n)=p(n-3)+p(n-2)이 성립한다.따라서 해당 규칙을 기반으로 구현해주면 된다.n은 1부터 시작하므로 인덱스 0은 사용하지 않는다.(임의의 값으로 설정)유사문제1, 유사문제2
접근 방법 각 자리별로 나누어서 구해주면 된다.
문제 나의 답안 * 접근 방법 * 다음과 같은 삼각형에서 삼각형의 아랫줄부터 보는 것이 이해하기 편하다. 가장 아랫줄을 보면 (왼쪽) arr4=4+arr3 (오른쪽) arr4=5+arr3 *
접근 방법 그냥 a/b를 하면 서브테스크 조건을 충족하지 못한다.따라서 몫과 나머지를 구하고 몫, 나머지를 반복해서 붙여주고, 초기화해주면 된다. 그리고 몫(m)을 출력해주면 된다.
첫번째 제출에서 시간 초과가 나서 input = sys.stdin.readline를 사용해주었다. 접근 방법 모든 도로의 거리는 1이므로 bfs 문제로 풀어줄 수 있다.출발 도시 x에서 x로 가는 최단 거리는 항상 0이므로 시작 노드를 0으로 초기화해주어야 한다.시작
접근 방법 뒤쪽 날짜부터 접근 해야 한다. (n+1일에는 일을 할 수 없으므로) 유사 문제뒤쪽 날짜부터 매일 현재 날짜의 이익 + 현재 상담을 마친 날짜부터의 이익을 계산해주어 현재까지의 이익과 계산 한 값 중 최대값을 도출해내면 된다.즉, max(p\[i]+dp\
이렇게 풀면 a\*\*b연산을 하는 과정에서 시간 복잡도가 증가한다. 접근 방법 총 10대의 컴퓨터가 동작하므로 10을 한바퀴 돌아도 1의 자리 값이 일정하다.다음과 같다. 여기서 1의 자리 0은 10의 배수와 동일하다.1, 5, 6은 본인을 그대로 가진다.4와 9는
접근 방법듣도 못한 사람과 보도 못한 사람에 해당하는 사람을 구하면 되므로 교집합을 구하는 문제이다.set을 &(intersection)하면 교집합을 구할 수 있으므로 교집합을 구해준 후, len으로 개수를 세고 출력해준다.
교집합으로 문제를 풀었다. 교집합으로 풀면 중복된 문자열이 주어졌을 때 올바른 값이 도출되지 않으므로 틀린풀이이다.접근 방법s에 해당하는 문자열을 입력받는다.m만큼 반복하며 새로운 문자열을 입력받으면서 바로바로 s안에 포함되는지 확인한다. s안에 포함되면 cnt를 1
접근 방법set으로 입력을 받고, 차집합을 구한 후 크기를 구해 더하면 된다.
접근 방법이중 반복문으로 문자열의 부분 문자열을 구한다.구한 부분 문자열을 빈 집합에 추가하여 len으로 길이를 구해 출력해준다.
접근 방법 첫번째 문자열을 기준으로 그 이후 문자열을 비교한다.첫번째 문자열의 문자와 다르다면 해당 문자를 ?로 변환한다.
일반적으로 소수 구하는 것처럼 문제를 접근했더니 시간초과라는 결과가 나왔다. 접근 방식문제에서 제시한 1 ≤ n ≤ 123,456 범위에 따라 사전에 소수를 구해주었다.이후 0을 입력받을 때까지 n부터 n\*2까지의 소수 개수를 카운트 해준다.
접근 방법 배열의 시작부터 더해가며 현재 값만 있을 때와 여태까지 더한 값에 현재 값을 더한 것 중 큰 값을 dp에 저장한다.마지막으로 max를 사용해 큰 값을 출력해준다.
접근 방법 '성냥이 박스에 들어가려면, 박스의 밑면에 성냥이 모두 닿아야 한다.'라는 조건에 따라 성냥이 들어가려면 상자의 대각선 길이보다 작아야 한다.w,h를 통해 대각선 길이를 구하고(피타고라스), 해당 길이보다 작다면 DA를 출력 아니라면 NE를 출력하도록 한다
해당 풀이는 숫자가 커질수록 계산해야 하는 숫자도 커지게 되므로 시간 초과가 발생할 수 밖에 없는 방법이다. 접근 방법 최소 공배수 문제이므로 유클리드 호제법으로 풀 수 있다.해당 개념을 까먹어 어떤 분의 정리글을 참고했다.최소 공배수는 두 수의 곱을 최대 공약수로 나
만만하게 봤다가 계속 틀린 문제접근 방법그냥 배열 인덱스의 합을 구해주면 시간초과가 난다. 따라서 dp로 풀어주었다.입력받은 숫자의 누적합을 dp에 저장한다.i, j를 입력받고 해당하는 값의 합을 출력해준다.
접근 방법 문제에서 제시한 의사코드를 참고해 구현해주면 된다.재귀를 사용하기에 파이썬으로 제출하면 시간초과가 발생할 것 같아 pypy3로 제출해주었다.
반복문을 10씩 증가하도록 하여, 문자열을 10단위로 끊어주면 된다.
접근 방법 bfs로 풀어주었다.상하좌우로 이동하면서 1인 경우 큐에 추가하고, 1을 더해 카운터 값을 증가해나간다.마지막으로 최종 카운트 값을 출력해준다
런타임에러라는 결과가 도출되었다.https://www.acmicpc.net/board/view/81147 를 참고해 수정하였다.
동일한 코드를 python3와 pypy3로 제출했다..ㅎ재귀로 풀면 시간초과가 발생하는 것을 알 수 있었다.접근 방법재귀를 사용하지 않고 풀어주어야 한다.n이 0과 1일 땐 각각 0과 1의 값을 가지므로 미리 dp배열에 저장해두고, 반복문을 통해 2부터 n까지 순차적으
접근 방법dp문제, 문제의 조건에 따라 길이가 2이상이면 앞 두자리는 10로 고정된다.n=2, 10n=3, 10+0,1 =>100,101n=4, 10+00,01,10 => 1000,1001,1010n=4일때, n=3 숫자(뒤에서 2자리) 2개, n=2의 1개의 숫자의
접근 방법 브루트포스 문제이므로 A의 길이가 B의 길이보다 작거나 같으므로 A의 길이에 맞춰서 B를 비교해주어야 한다.A를 기준으로 A의 길이만큼 B를 잘라서 비교해준다. 만약 비교결과가 다르다면 cnt를 1씩 증가해주고, 배열에 cnt값을 추가한다.배열에서 가장 작
접근 방법9명 중 7명의 난쟁이를 찾아야 하고, 7난쟁이의 키의 합이 100이므로 7명의 키의 합이 100일 때를 찾으면 된다.즉 9명의 배열의 합에서 2명의 키를 제외했을 때 100이 되는 순간을 찾으면 된다.
접근 방법유사 문제DP문제이므로 규칙을 찾으면 된다.n=1일 때, 1n=2일 때, 3n=3일 때, 5n=4일 때, 11이므로 dp\[n]=dp\[n-1]+dp\[n-2]\*2라는 점화식을 가짐을 알 수 있다.
접근 방법dp문제이므로 점화식을 도출해내면 된다. n=1일 때 9개, 1,2,3,⋯,9n=2일 때 17개, 10,21,23,32,34,43,45,⋯,87,89,98n=자리 수이고, 1의 자리에 오는 숫자(이하 j)가 무엇인지에 따라 앞에 올 수 있는 숫자가 달라진다.j
접근 방법문자열 인덱스를 사용해 뒤의 두자리를 잘라주기 위해 문자열로 입력받는다.두자리를 자르고 00을 붙여준 후, while문을 통해 나머지가 0이 나올 때까지 f로 나누어준다.
유사문제 2178번 미로 탐색접근 방법최소일수를 구하기 위해 BFS를 이용한다.토마토 값을 입력받고, 토마토가 있는 곳의 값을 큐에 추가해준다.while문을 통해 갈 수 있는 곳의 좌표를 큐에 저장해준다.(모든 값 탐색)좌표 안에 익지 않은 토마토가 있다면 해당 좌표의
우선순위 큐를 위해 heapq 모듈의 사용법을 알아야 한다.접근 방법우선순위 큐, 그리디 문제이다.문제 풀이를 위해 작은 수부터 2개씩 순차적으로 더해주어야 한다. heapq는 오름차순으로 저장되기 때문에 따로 정렬해줄 필요가 없다.(10+20)+(30+40)=1002
배열로 각 값을 비교하려고 했으나 시간초과가 났다.잘못된 알고리즘이라 코드를 다시 짜주었다.접근 방법b에서 a보다 작은 값 중 가장 큰 값을 찾아야 한다. 이를 위해 이분탐색으로 문제를 풀어준다.이분탐색 풀이를 위해 배열 a, b는 내림차순으로 정렬해준다.가장 큰 값의
접근 방법우선순위 큐 문제이고, heapq를 사용해 구현해주었다.heapq을 사용하면 최소힙으로 구성되므로 이를 최대 값이 루트가 되는 최대힙으로 구현해주어야 한다.heappush를 사용해 튜플을 arr에 넣어주는데, 이때 최대힙을 구현하기 위해 튜플은 s를 음수로 만
접근 방법표의 내용을 딕셔너리로 선언해주고, 반복문을 통해 문자열의 길이가 1이 될 때까지 반복해준다.조건문을 통해 마지막의 두 문자열(ss)이 딕셔너리 안에 있으면 문자열에서 해당 내용을 삭제하고 딕셔너리의 get을 통해 해당 두 문자열에 해당하는 value값(dna
접근 방법itertools의 조합 모듈을 이용해주었다.리스트로 숫자들을 입력받고 첫번 째 수(k)를 pop해준다.combinations을 사용해 6개의 숫자를 인자로 갖는 조합을 구해주었다.itertools는 파이썬에서 리스트의 조합을 구해주는 유용한 라이브러리이다.p
접근 방법문제의 조건에서 두 소수의 차이가 가장 작은 것부터 출력한다고 하였으므로 n의 절반(n//2)부터 쁠마1씩 차를 줄여나가면서 구해주면 된다.에라토스테네스의 체(소수 구하기)를 사용하여 소수를 구할 때의 시간 복잡도를 줄여준다.
파이썬의 기본 재귀 깊이는 1000이라고 한다. dfs함수를 재귀적으로 호출하고 있으므로 깊이를 확장해주어야 한다. (참고: https://www.acmicpc.net/board/view/85228)접근 방법dfs 문제, 지난번에 풀었던 바이러스 문제와 유사한
isupper islower를 사용하여 문자 하나하나 비교하는 방법을 사용하려고 했으나 파이썬에서 메소드를 제공한다는 사실을 알게되었다.swapcase()는 대문자 -> 소문자 | 소문자 -> 대문자로 변환해주는 함수이다.