본문 바로가기

Computer Science&Engineering

(112)
[백준 1406] 에디터 문제 링크 www.acmicpc.net/problem/1406 1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net ✅ 커서의 왼쪽에 들어가는 문자들과, 커서의 오른쪽에 들어가는 문자들을 따로 보관하였다. 커서가 움직일 때마다 왼쪽과 오른쪽 문자가 들어있는 배열에 push 하고 pop 하여 구현하였다. R의 최대는 600000 이고, L은 커서를 왼쪽으로 옮길 때 입력이 되기 때문에 (문자 입력+L 동작이 필요) 300000을 최대로 잡았다. C언어로 풀었는데, 아마 C++ 이나 파이썬에서는 stack 을 활용해서 ..
[백준 10799] 쇠막대기 문제 링크 www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net '(' 가 나오면 막대기 레이어가 추가되고, ')'가 나오면 레이어가 준다. '()' 가 나오면 레이어 수만큼 절단된 쇠막대기 개수가 증가한다. # 제출 코드 #include char A[100000+10]; int main(){ int i = 0, layer = 0, sum = 0; scanf("%s", A); for(i=0; A[i]; i++){ if(A[i] == '(' && A[i+1]== ')') { ..
[백준 9012] 괄호 www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net 스택처럼 '(' 일때 push하고, ')' 일때 pop 하면 되겠다. 굳이 스택을 구현하지 않고, '(' 일때는 +1, ')' 일때는 -1 을 해서 0이 되면 VPS로 판단하기로 했다. 검사하는 도중에 0보다 작아지면 for문을 탈출한다. VPS 는 1 이후 -1 이 나와서 0이 되어야 하기 때문! -1이 먼저 나오거나 -1이 1보다 어러번 나오면 안된다. # 제출 코드 #incl..
[백준 10828] 스택 문제 링크 www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 스택의 동작을 구현하도록 한 문제이다. 처음에는 각각의 동작을 함수로 구현했으나, 나중에 생각해보니 단순 출력만 하면 되는데 굳이? 라는 생각이 들어 그냥 바로 출력해버리도록 구현했다. 제출 시에 함수 return 을 제대로 해주지 않으면 오류가 나서, 그냥 단순하게 구현하는게 베스트라는 생각이 들었다. main 함수도 return 0; 가 없으면 에러난다. # 제출 코드 #incl..
[백준 별찍기 1~9] 쉬운 별찍기 모음 #별찍기꿀팁 #별찍기9개 #피라미드 #역피라미드 #모래시계찍기 #마름모찍기 # 저의 별찍기 꿀팁은 줄 변수를 line 으로 잡고, 별을 star, 공백을 blank 로 적는겁니다. 이게 되게 별 것 아닌 것 같지만 별찍기 할 때 도움이 되더라고요. [백준 2438번] 별찍기 -1 int main(){ int N; int line, star; scanf("%d", &N); for(line = 0; line < N; line++){ for(star = 0; star
[백준 10818] 최소, 최대 구하기 문제 링크 www.acmicpc.net/problem/10818 10818번: 최소, 최대 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다. www.acmicpc.net 변수 N에 N개의 정수 개수를 입력받고, tmp 에 정수를 입력받아서 계산해주면 될 것 같아요. 최대 max, 최소 min 변수를 만들어주고, 입력받을 때마다 비교해서 제일 큰 수와 제일 작은 수를 찾을 수 있어요. # 제출 코드 #include int main() { int N, tmp, max, min; scanf("%d", &N); scanf("%d", &tm..
[백준 8393] 합 # 1부터 N까지 합 문제 링크 www.acmicpc.net/problem/8393 8393번: 합 n이 주어졌을 때, 1부터 n까지 합을 구하는 프로그램을 작성하시오. www.acmicpc.net 1부터 N까지 합이니까 for문을 사용해도 되고 while 을 사용해도 된다. 다만, 이 때는 시간 복잡도가 O(N)이 된다. 단순한 계산식을 활용해서 O(1) 코드를 구현할 수 있다. #include int main() { int N, sum=0; scanf("%d", &N); while(N>0){ sum += N--; } printf("%d",sum); } ✔ sum += N 을 N 번 계산해주어야 한다. #include int main() { int N, sum=0; scanf("%d", &N); printf("%d", N*..
[백준 1924] 2007년 #요일구하기 문제 링크 www.acmicpc.net/problem/1924 1924번: 2007년 첫째 줄에 빈 칸을 사이에 두고 x(1 ≤ x ≤ 12)와 y(1 ≤ y ≤ 31)이 주어진다. 참고로 2007년에는 1, 3, 5, 7, 8, 10, 12월은 31일까지, 4, 6, 9, 11월은 30일까지, 2월은 28일까지 있다. www.acmicpc.net 변수 x, y 에 월과 일을 입력받고, 해당 일까지 날짜 수를 구해서 7로 나눈 나머지에 따라서 요일을 출력해주면 된다. 예를 들어 1월 1일이 월요일일때, 일주일 뒤인 1월 8일 또한 월요일이 된다. 날짜를 7로 나눈 나머지가 1일 때 월요일이다. 이처럼 7로 나눈 나머지가 2일 때 화요일, 3일 때 수요일, 4일 때 목요일이 되도록 구성해주면 된다. # 제..