스택을 파이썬에서는 리스트로 구현한다.반복문 안에서는 input()보다 sys.stdin.readline()을 사용해야 시간초과 발생 확률 Down.input()과 sys.stdin.readline()의 차이push는 입력을 "push 1"로 입력된다.입력문에서 pus
반복문 안에서는 input()보다 sys.stdin.readline()을 사용해야 시간초과 발생 확률 Down.뒤집는 방법은 여러 방법이 있다. 그 중 ::-1은 인덱싱을 활용했다.input()과 sys.stdin.readline()의 차이리스트 형식으로 입력받은 문장
"("와 ")"의 개수를 일일이 파악하지 않고 변수를 생성해서 +1, -1 해줄 수 있다.NO의 경우1\. ( ) )일 때.2\. "("와 ")"의 개수가 맞지 않을 때두번 째 for문을 입력받은 괄호의 개수만큼 반복시킨다."(", ")"에 따라 +1, -1을 해준다.
이 문제의 경우 대다수의 사람들이 지문 이해가 어렵다고 한다.지문에서 말하는 조건스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자.\-> 주어진 수를 활용하되 꼭 주어진 수로 push를 하라는 말이 아님. push는 꼭 오름차순 수열.임의의 수열이 주어
밑의 코드는 이 문제를 보고 처음 문제를 푼 코드다.cursor라는 변수를 만들어서 커서의 위치를 나타내도록 했다.그걸 사용하기 위해서 pop(), insert()를 사용했다.시간초과가 계속 나와서 구글링 해보니 시간복잡도의 문제였다.시간 복잡도: O(1)보다 O(N)
큐를 파이썬에서는 리스트로 표현할 수 있다.반복문 안에서는 input()보다 sys.stdin.readline()을 사용해야 시간초과 발생 확률 Down.input()과 sys.stdin.readline()의 차이pushpush는 큐의 규칙 상 마치 사람들이 줄을 서듯
살아있는 사람을 넣고 죽은 사람을 뺄 큐, 죽은 사람을 넣을 큐 이렇게 두 개의 큐를 사용한다.내가 처음에 작성한 코드는 수식 없이 +1씩 카운팅해서 k와 같아질 때 죽이는 방식으로 했다.카운팅으로만 코드를 짜니까 코드가 복잡해지고 길어졌다.구글링 결과 수식으로 해결할
문제의 제목대로 데크를 사용해서 문제를 수월하게 풀 수 있다.데크 deque 설명글push_front일 때appendleft() 함수를 이용.pop_front일 때popleft() 함수를 이용.
두 개의 더하기 방법으로 접근하면 문제를 쉽게 풀 수 있었다.a += b (a = a + b와 같음)\-> aba = b + a\-> ba< > 꺽쇠괄호 밖에 있는 것만 뒤바뀐다.띄어쓰기는 위치 그대로다.꺽쇠괄호는 그대로 가져가기 위해서 <(왼쪽 꺽쇠)가 나
이 문제는 stack으로 풀 수 있다.괄호를 stack에 넣고 빼면서 쇠막대기의 잘리는 수를 더할 수 있다.'('는 그냥 스택에 넣는다')'가 나오면 두가지 경우로 나누어진다.')'가 나오고 이전 문자가 '('이었다면 해당 파트는 레이저이다. 따라서 현재 stack에
예제 입력: 43 5 2 73의 경우, 오큰수 5를 찾을 수 있다.5의 경우, 오큰수를 찾지 못했다.2-1. 이때 5를 stack에 넣어보자.2의 경우, 오큰수 7을 찾을 수 있다.3-1. 이때 오큰수 7과 stack에 들어있는 5를 비교해보자.3-2. 5의 경우, 오
후위 표기식(ABC+DE/-)을 중위 표기식(A+BC-D/E)으로 바꿔야한다.주어진 자료를 재정리 해야한다.Stack은 주어진 자료를 재정리 할 때 주로 사용되는 방법이다.피연산자를 Stack에 넣고 연산자를 만나면 가장 위에 있는 값 두 개를 꺼내서 계산 후 다시 S
중위 표기식(A+BC-D/E)을 후위 표기식(ABC+DE/-)으로 바꿔야한다.주어진 자료를 재정리 해야한다.Stack은 주어진 자료를 재정리 할 때 주로 사용되는 방법이다.알파벳은 문자열로 쌓고괄호와 연산자는 Stack에 쌓는다.조건이 맞으면 Stack에 있는 연산자를
알파벳이 나열되어 있는 문제는 아스키코드를 활용해서 풀면 좋다.문자를 아스키코드로 변환ord("a") -> 97ord("b") -> 98ord("A") -> 65ord("B") -> 66아스키코드를 문자로 변환chr(97) -> "a"chr(98) -> "b"chr(6
알파벳이 나열되어 있는 문제는 아스키코드를 활용해서 풀면 좋다.문자를 아스키코드로 변환ord("a") -> 97ord("b") -> 98ord("A") -> 65ord("B") -> 66아스키코드를 문자로 변환chr(97) -> "a"chr(98) -> "b"chr(6
몇개의 문자열이 들어오는지 모르는 상황에서 어떻게 input을 받을 것인가.\-> 몇개의 문자열이 들어오는지 모르기에 sys.stdin.readline()을 사용한다.\-> sys.stdin.readline()은 개행문자('\\n')를 받는다. 없애기 위해서 rstri
알파벳 나열은 아스키코드를 사용하면 편리하다.알파벳에서 13글자씩 밀어서 쓸 때의 규칙을 생각해본다.A(65) -> +13 -> N(78)...M(77) -> +13 -> Z(90)N(78) -> -13 -> A(65)...Z(90) -> -13 -> M(77)a ~
input()으로 들어오는 것은 숫자도 문자열로 인식된다.문자열을 더하면 수식으로 계산되지 않고 문자형식 그대로 앞 뒤로 붙여진다."1" + "2" = "12""3" + "4" = "34"문자열 형식의 수를 정수로 바꾸려면 int()를 사용하면 된다.int("12")
어떻게 input()으로 받은 문자열의 맨 앞 글자 한 자씩 빼서 저장시킬까?\-> 앞글자를 제외한 나머지를 list에 넣을 수 있다.알파벳을 어떻게 정렬시킬까?\-> list의 함수 중 정렬시킬 수 있는 sort() 함수가 있다.맨 앞 글자를 뺀 문자열을 저장시킬 l
최대공약수를 어떤 방법으로 계산할 수 있을까?\-> 유클리드 호제법을 사용하면 간단하게 계산할 수 있다.💡유클리드 호제법:2개의 자연수(또는 정식) a, b에 대해서 a를 b로 나눈 나머지를 r이라 하면(단, a>b), a와 b의 최대공약수는 b와 r의 최대공약수와
소수는 해당 수를 1과 나누었을 때 나머지가 0이 나오고 해당 수를 자기 자신을 나누어서 나머지가 0이 나오는 수. 딱 1과 자기 자신을 나누었을 때만 0이 나와야한다.3 % 1 = 03 % 2 = 13 % 3 = 0\-> 3은 소수9 % 1 = 09 % 2 = 19
소수는 해당 수를 1과 나누었을 때 나머지가 0이 나오고 해당 수를 자기 자신을 나누어서 나머지가 0이 나오는 수. 딱 1과 자기 자신을 나누었을 때만 0이 나와야한다.3 % 1 = 03 % 2 = 13 % 3 = 0\-> 3은 소수9 % 1 = 09 % 2 = 19
다이나믹 프로그래밍의 조건1\. problem이 sub-problem으로 쪼개질 때.2\. sub-problem으로 problem을 구할 수 있을 때.3\. sub-problem이 겹칠 때.(값을 보관해서 중복을 없앤다.)다이나믹 프로그래밍이므로 점화식으로 생각을 해야
다이나믹 프로그래밍의 조건1\. problem이 sub-problem으로 쪼개질 때.2\. sub-problem으로 problem을 구할 수 있을 때.3\. sub-problem이 겹칠 때.(값을 보관해서 중복을 없앤다.)2 × n의 모형에 대해서 생각해본다.아래와 같
다이나믹 프로그래밍의 조건1\. problem이 sub-problem으로 쪼개질 때.2\. sub-problem으로 problem을 구할 수 있을 때.3\. sub-problem이 겹칠 때.(값을 보관해서 중복을 없앤다.)2 × n의 모형에 대해서 생각해본다.아래와 같