알고리즘/백준(BOJ)
-
[백준/BOJ] 3986번 : 좋은 단어 _C/C++알고리즘/백준(BOJ) 2022. 2. 15. 23:55
3986번: 좋은 단어 이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에 www.acmicpc.net >문제 >접근방법 스택을 쓰면 될 것 같다. 만나는 글자와 top을 비교해보고 같으면 pop, 다르면 push 하도록 >알고리즘 1. 입력 문자열 개수만큼 첫 번째 for문 반복 2. 문자열을 배열 str[100001]에 입력받는다. 3. 입력받은 문자열 길이만큼 두 번째 for문 반복 4. 스택이 비어있으면 str[j]를 push 한다. 5. 스택의 top과 str[j]가 같으면 pop, 다르면 push 한다. 6. 두 번째 for문이 끝나고 스택이 비어있으면 좋은 문자..
-
[백준/BOJ] 10773번 : 제로 _C/C++알고리즘/백준(BOJ) 2022. 2. 14. 22:43
10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net >문제 >접근방법 0 이 나올 때마다 가장 최근 숫자를 지우는 거니까 스택 라이브러리를 쓰면 되겠다. >알고리즘 1. 입력 문자열 개수만큼 첫 번째 for문 반복 2. for문1 : 입력된 숫자가 0일 경우 pop, 0이 아닐 경우 push 3. for문2 : 남아있는 숫자 sum에 합산 >코드 #include #include using namespace std; int num, in; int i, j, sum=0; int mai..
-
[백준/BOJ] 9012번 : 괄호 _C언어알고리즘/백준(BOJ) 2022. 2. 13. 19:54
9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net >문제 >접근방법 괄호를 보니 작년에 배웠던 자료구조에서 스택이 떠올랐다. 스택 사용법을 보다가 top 개념만 차용해 왔다. 여는 괄호 '('를 만나면 top에 1을 더해주고 닫는 괄호 ')'를 만나면 top에 1을 빼준다. 0이 되면 맞고, 음수가 되면( 닫는 괄호가 더 많은 시점에) break를 건다. >알고리즘 1. T를 num에 입력받는다. num만큼 반복 수행 2.top은 0으로 시작. 3. ( 를 만나면 top++, )..
-
[백준/BOJ] 10798번 : 세로읽기 _C언어알고리즘/백준(BOJ) 2022. 2. 13. 13:11
https://www.acmicpc.net/problem/10798 10798번: 세로읽기 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’ www.acmicpc.net >문제 >접근방법 2차원 배열로 입력받고 반복문으로 인덱스 변수만 바꿔서 출력 >알고리즘 1. 2차원 배열로 입력받기 2. [i][j]이면 j를 기준으로 for문1, i를 기준으로 for문2 진행 3. for문2가 공백일 경우 continue >코드 (삽질ver) #include #include #include /* 알고리즘 조건: 5줄 15글자 이하의 글자, 세로로 읽되 공백은 무시, 출..
-
[백준/BOJ] 1652번 : 누울 자리를 찾아라 _C언어알고리즘/백준(BOJ) 2022. 2. 10. 00:02
1652번: 누울 자리를 찾아라 첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다. www.acmicpc.net >문제 >접근방법 가로든 세로든 구하는 방식은 똑같이 적용하면 될테고 행이나 열 단위로 빈 자리 개수를 카운트 하면서 카운트가 2 이상이면 자리 개수를 하나 늘려주면 될 것 같다. 짐이 있는 곳을 만나면 카운트를 다시 0부터 세도록 하고 반복. >알고리즘 1. . 이 있으면 count 증가 2. for문1 : 가로 누울 자리 확인 3. for문2: 세로 누울 자리 확인 >코드 #include #include /* 알고리즘 2차원 배열에 방 입력받기 ...
-
[백준/BOJ] 5555번 : 반지 _C언어알고리즘/백준(BOJ) 2022. 2. 4. 20:00
https://www.acmicpc.net/problem/5555 >접근방법 (방법1) 문자열이 같아지는 부분의 인덱스를 변수에 저장하고 그 부분부터 문자열 끝까지 다 맞으면 count 를 더해준다. 다르면 반복문을 나와 다시 검사한다. 문제에서 반지는 처음과 끝이 연결되어 있기 때문에 끝에서 처음으로 문자열이 연결되어있는 경우를 생각해서 조건문을 설정했다. 문자열 최대 길이가 10이기 때문에 10 - '문자열길이' 가 j 보다 작을 경우 j를 0으로 보내준다. (방법2) 찾으려는 문자열이 반지의 끝과 처음의 경계에 걸쳐있을 경우를 생각해서 반지 문자열을 두 줄로 복사해서 새 배열에 담는다(예. "ABCXXYYYYY" -> "ABCXXYYYYYABCXXYYYYY"). 그 배열을 반복문으로 문자열이 있는지..