백준 24

[백준] 21610. 마법사 상어와 비바라기

https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 2021 상반기 삼성 SW역량테스트 오후 기출문제이다. 크게 어려운 건 없는 문제다. 각 기능을 모두 함수로 구현했다. move_clouds는 구름이동, fall_rain은 비 뿌리기, copy_water은 물복사버그 마법, make_clouds는 구름 새로 생성, solve는 총 비의 양 계산이다. move_clouds 에서 새로운 list를 return 해주었는데, 직접 원소에 접근해서..

알고리즘 2021.10.11

[백준] 16235. 나무 재테크

https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 www.acmicpc.net pypy3로 돌렸다. 문제만 이해하면 어렵지 않은 문제다. 그냥 시키는 대로 구현하면 된다. 나는 봄, 여름, 가을, 겨울 모두 함수를 만들어 주었다. 기본 밭 리스트, 살아 있는 나무 리스트, 겨울마다 추가될 양분 리스트, 죽은 나무 리스트를 각각 다 만들어 주었다. 이렇게 안 만들어도 될 것 같은데 생각나는 게 이거밖에 없어서.. 나중에 효율적으로 다시 풀어보긴 해야할 것 같다..

알고리즘 2021.10.07

[백준] 21609. 상어 중학교

https://www.acmicpc.net/problem/21609 21609번: 상어 중학교 상어 중학교의 코딩 동아리에서 게임을 만들었다. 이 게임은 크기가 N×N인 격자에서 진행되고, 초기에 격자의 모든 칸에는 블록이 하나씩 들어있고, 블록은 검은색 블록, 무지개 블록, 일반 블록 www.acmicpc.net 삼성 2021 상반기 문제다.. bfs를 이용해서 빡구현하는 문제다. 그냥 시키는 대로 구현하면 된다. 뭐 설명할 것도 없는 문제.. 중력 구현이 너무 헷갈렸다. 중력 관련 문제를 더 풀어야겠다는 생각이 든다. find_big_block 과 count_block를 합치고, delete를 줄일 수 있을 듯 한데.. 귀찮다.. 중간에 find_bing_block 에서 변수 이름하나 잘못 적어서 계..

알고리즘 2021.10.05

[백준] 21608. 상어 초등학교

21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 삼성전자 2021 상반기 문제이다. input data를 리스트로 한 번에 받아 준 뒤, for 문으로 리스트를 순회하며 {학생:(좋아하는 친구)} 형식으로 dictionary에 저장하고 find_desk() 함수를 돌아가며 자리를 정해줬다. dictionary에 자료를 저장한 이유는 뒤에 만족도 조사 시에 편리하게 확인하기 위해서 이다. find_desk() 함수는 완전 탐색으로 모든 곳을 확인하며, 비어있는 책상에서 delta 변수로 상하좌우를 확인..

알고리즘 2021.10.05

[백준] 1744. 수 묶기

https://www.acmicpc.net/problem/1744 1744번: 수 묶기 길이가 N인 수열이 주어졌을 때, 그 수열의 합을 구하려고 한다. 하지만, 그냥 그 수열의 합을 모두 더해서 구하는 것이 아니라, 수열의 두 수를 묶으려고 한다. 어떤 수를 묶으려고 할 때, 위치에 www.acmicpc.net 입력을 받을 때 부터 조건문을 이용해 1일 경우는 그냥 answer에 더 해주고, 1보다 클 경우는 gt_arr에, 0과 음수는 lt_arr에 담아준다. 이때 1을 리스트에 넣지 않고 더해주는 이유는 1*n 과 1+n 중에 1+n이 더 크기 때문이다. 1의 경우는 곱셈을 하면 절대 최댓값이 나오지 않는다. 양수일 경우 내림차순으로 정렬, 음수일 경우는 오름차순으로 정렬해준다. 이는 큰 원소들끼리..

알고리즘 2021.09.29

[백준] 12904. A와 B

https://www.acmicpc.net/problem/12904 12904번: A와 B 수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수 www.acmicpc.net 처음에는 s에서 t로 바꿔주기 위해 모든 경우의 수를 다 살펴보는 방법을 생각했는데, 이는 T의 최대 길이가 1000이므로 시간초과가 날 수 밖에 없는 코드였다. 여기서 생각의 전환이 필요한데, S를 T로 바꾸는 것이 아니라 T를 S로 바꿔준다면 while 문으로 쉽게 끝낼 수 있다. 알고리즘 문제를 풀 때 아이디어가 얼마나 중요한 지 알 수 있는 문제였다. ..

알고리즘 2021.09.28

[백준] 1541. 잃어버린 괄호

https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 일단 덧셈을 먼저 다 해준 다음에 빼주면 되니까 '-'를 기준으로 split() 해준다. 리스트의 첫 원소에 숫자만 있을 수도, + 연산자가 같이 있을 수도 있으므로 일단 '+'를 기준으로 split() 한 뒤 더해준 결과를 answer에 저장한다. 그 뒤에 똑같이 '+'를 기준으로 split() 한 뒤 더해준 결과를 answer에서 계속 빼주면 된다. 처음에는 eval() 함수를 이용해서 ..

알고리즘 2021.09.28

[백준] 1931. 회의실 배정

1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 활동 선택 문제의 일종이다. 종료 시간을 기준으로 정렬해서, 종료 시간이 빠른 것을 선택하는 Greedy 적인 사고로 해결할 수 있다. 종료 시간이 같은 경우는 시작 시간이 빠른 순으로 정렬해주어야 (2,2) (1,2) 순서로 들어온 데이터에도 적용이 가능하다. 처음에는 sort를 두 번 해줬는데 key=lambda x: () 로 튜플 안에 여러 인자를 주면 인자 순서대로 정렬된다. 그 뒤 for문을 돌며 greedy로 해결해주면 된다. import sys input = sys.stdin.readline # 활동 선택 문제 -> 종료시간을 기준으로 정렬 n = int(input..

알고리즘 2021.09.24

[백준] 9935. 문자열 폭발

https://www.acmicpc.net/problem/9935 9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net 그냥 완전 탐색으로 풀었더니 당연히 시간초과가 났다. 스택을 생각했다가 어떻게 활용해야 될지 모르겠어서 패스 했는데 알고리즘 분류에도 스택이 있길래 다시 도전했다. 스택으로 한참 생각해보니까... 의외로 쉬워서 당황 ㅋㅋ 스택 수열 풀때랑 비슷..? 하게 일단 스택에 넣고 확인하는 게 답이었다. 일단 스택에 집어 넣은 뒤, 스택의 top과 bomb의 마지막 글자가 같고 스택의 길이가..

알고리즘 2021.09.18