알고리즘/백준(BOJ)
-
[백준/BOJ] 10799번 : 쇠막대기 _Python알고리즘/백준(BOJ) 2022. 2. 28. 02:56
10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net >문제 >접근방법 레이저를 만나면 조각 개수는 막대 하나 당 '레이저개수+1' 개 가 된다. 막대기의 개수를 확인하려면 스택을 쓰는게 편하겠다. >알고리즘 1. 스택으로 사용할 s[] 리스트를 만든다. 2. 리스트 ch[]에 괄호들을 입력받는다. 3. ( 만나면 s에 append 한다. 4. 레이저 () 를 만나면 s에 있는 ( 의 개수(s의 길이)를 sum에 더한다. 5. ) 만나면 sum에 1 더하고 pop 시킨다. 이때 )가 레이저()의 ) 일수도 있기 때문에 )를 만..
-
[백준/BOJ] 3986번 : 좋은 단어 _Python알고리즘/백준(BOJ) 2022. 2. 26. 22:14
3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 www.acmicpc.net >문제 >접근방법 스택 개념을 쓰면 될 것 같다. 만나는 글자와 top(파이썬의 경우, list[-1])을 비교해보고 같으면 pop, 다르면 append >알고리즘 1. 입력 문자열 개수만큼 첫 번째 for문 반복 2. 문자열을 리스트 word[]에 입력받는다. 3. 입력받은 문자열 길이만큼 두 번째 for문 반복 4. 리스트가 비어있으면 word[j]를 stack[]에 append한다. 5. stack[]의 끝값(마지막에 넣은 값)과 word[j]을 비교해보고 같으면 p..
-
[백준/BOJ] 10773번 : 제로 _Python알고리즘/백준(BOJ) 2022. 2. 26. 01:11
10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net >문제 >접근방법 리스트에 입력받고 0이 나올때마다 pop시키면 되겠다. >알고리즘 1. 입력 문자열 개수만큼 첫 번째 for문 반복한다. 2. for문1 : 입력된 숫자가 0일 경우 pop, 0이 아닐 경우 append() 한다. 3. for문2 : 남아있는 숫자 sum에 합산한다. (이때 스택의 stack.top() 개념은 list[-1]로 사용한다.) >코드 n = int(input()) stack = [] sum = 0 #..
-
[백준/BOJ] 9012번 : 괄호 _Python알고리즘/백준(BOJ) 2022. 2. 26. 00:42
9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net >문제 >접근방법 괄호를 보니 작년에 배웠던 자료구조에서 스택이 떠올랐다. 스택 사용법을 보다가 top 개념만 차용해 왔다. 여는 괄호 '('를 만나면 top에 1을 더해주고 닫는 괄호 ')'를 만나면 top에 1을 빼준다. 0이 되면 맞고, 음수가 되면( 닫는 괄호가 더 많은 시점에) break를 건다. >알고리즘 1. T를 n에 입력받고 n만큼 반복 수행한다. 2.top은 0으로 시작한다. 3. '(' 를 만나면 top에 1을..
-
[백준/BOJ] 10798번 : 세로읽기 _Python알고리즘/백준(BOJ) 2022. 2. 26. 00:27
10798번: 세로읽기 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’ www.acmicpc.net >문제 >접근방법 2차원 리스트로 입력받고 반복문으로 인덱스 변수만 바꿔서 출력. c에서 풀었던 코드를 그대로 쓰기엔 IndexError가 떠서 0으로 초기값을 설정해주고, 입력받은 문자열 길이만큼만 해당 인덱스의 값을 바꿔준다. >알고리즘 1. 2차원 리스트를 초기값 0으로 생성한다. 2. 문자열을 입력받고, 입력받은 길이만큼만 2차원 리스트의 0과 교체해준다. 3. for문 두개로 출력한다. >코드 strr = [] for n in range(5): s..
-
[백준/BOJ] 1652번 : 누울 자리를 찾아라 _Python알고리즘/백준(BOJ) 2022. 2. 24. 23:24
1652번: 누울 자리를 찾아라 첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다. www.acmicpc.net >문제 >접근방법 C언어랑 크게 다르지 않았다. -> 가로든 세로든 구하는 방식은 똑같이 적용하면 될테고 행이나 열 단위로 빈 자리 개수를 카운트 하면서 카운트가 2 이상이면 자리 개수를 하나 늘려주면 될 것 같다. 짐이 있는 곳을 만나면 카운트를 다시 0부터 세도록 하고 반복. >알고리즘 1. . 이 있으면 count 증가 2. for문1 : 가로 누울 자리 확인 3. for문2: 세로 누울 자리 확인 >코드 num = int(input()) cn..
-
[백준/ BOJ] 5555번 : 반지 _Python알고리즘/백준(BOJ) 2022. 2. 23. 01:02
5555번: 반지 당신은 N개의 반지를 가지고 있다. 각각의 반지는 대문자 10 문자로 이루어진 문자열이 새겨져 있다. 반지는 문자열의 시작과 끝이 연결된 형태로 문자가 새겨져 있다. 반지에 각인된 문자열을 www.acmicpc.net >문제 >접근방법 입력받은 문자열을 두 줄로 복사해주면 경계에 걸친 문자열도 검색할 수 있다. 문자열 검색은 if ..in을 이용한다. >알고리즘 너무 간단해서 코드로 대체 >코드 str = input() num = int(input()) cnt = 0 while num : ring = input() ring2 = ring + ring if str in ring2: cnt += 1 num -= 1 print(cnt) >결과 >결론 C로 풀었던 문제 파이썬으로 다시 풀어보..
-
[백준/BOJ] 10799번 : 쇠막대기 _C/C++알고리즘/백준(BOJ) 2022. 2. 17. 01:16
10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net >문제 >접근방법 레이저를 만나면 조각 개수는 막대 하나 당 '레이저개수+1 개 가 된다. 막대기가 여러개인걸 구분하려면 스택을 쓰는게 편하겠다. >알고리즘 1. 배열에 괄호들을 입력받는다. 2. 스택을 생성한다. 3. ( 만나면 push 4. 레이저 () 를 만나면 스택에 있는 ( 의 개수를 sum에 더한다. 5. ) 만나면 sum에 1 더하고 pop 시킨다. >코드 #include #include using namespace std; char str[100001]; in..