본문 바로가기

전체 글

(201)
[C++] 백준 27866번 - 문자와 문자열 오늘은 피곤해서 간단한 거 한문제만 풀어야겠다. 오랜만에 돌아온 문자열~ 문제 27866번 https://www.acmicpc.net/problem/27866 27866번: 문자와 문자열 첫째 줄에 영어 소문자와 대문자로만 이루어진 단어 $S$가 주어진다. 단어의 길이는 최대 $1\,000$이다. 둘째 줄에 정수 $i$가 주어진다. ($1 \le i \le \left|S\right|$) www.acmicpc.net 인덱스는 0부터 시작하기 때문에 s에서 i번째 글자를 출력해줘야하려면 인덱스에 i-1를 넣어줘야 한다. 그렇게 생각하고 코드를 제출했는데... 컴파일에러가 났다... 그래서 왜그러나하고 다시 봤더니 내가 문자열의 변수를 int라고 써줬다... 문자열 문제를 잘 안 풀었더니 이런 실수를 했다. ..
[C++] 백준 1072번 - 게임 어제에 이어 이분탐색 문제~~~ 문제1072번 https://www.acmicpc.net/problem/1072 1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시 www.acmicpc.net 여기서는 X가 1~1000,000,000이기 때문에 이대로 그냥 코드를 짜면 시간 초과가 나온다. 그래서 필요한 것이 이분 탐색이다. 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법이다. 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이 이분 탐색의 과정이다. '만약 Z가 ..
[C++] 백준 1789번 - 수들의 합 오늘은 이진탐색으로 풀 수 있는 문제를 가져왔다. 문제 1789번 https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 이진탐색을 하려면 정렬은 필수인데 여기서는 정렬된 자연수를 생각하므로 따로 정렬은 필요없다. start와 end를 각각 1과 S로 잡고 그 사이의 값을 mid로 잡는다. while문을 이용하여 start> S; long start = 1; long end = S; long result=0; while (start
[C++] 백준 10871번 - X보다 작은 수 이번에는 동적할당에 대한 문제를 풀어보고 싶어서 이 문제를 가져와보았다. 문제 10871번 https://www.acmicpc.net/problem/10871 10871번: X보다 작은 수 첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000) 둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다. www.acmicpc.net 문제 자체는 간단하다. 정수 N개로 이루어진 수열 A에서 X보다 작은 수를 모두 출력하면 되는 문제이다. 그런데 여기서 그냥 num[10000] 이런 식으로 배열의 최대 크기만큼 설정해준다면 메모리 낭비가 생긴다. 그러므로 동적할당을 해주는 것이 좋다. 동적할당은 미리 배열의 크기를 설정해놓..
[C++] 백준 10773번 - 제로 문제 10773번 https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 입력받은 값을 vector에 저장해준다. 그리고 벡터의 사이즈 만큼 반복문을 돌려서 0이 있는지 확인한다. 만약 0이라면 해당 인덱스와 최근에 쓴 수의 인덱스를 erase()를 통해 지워준다. 여기서 지운 인덱스 2개를 빼줘야한다. 마지막으로 accumulate로 합을 구해준다. #include #include #include using name..
[C++] 백준 4963번 - 섬의 개수 문제 4963번 https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net 갈 수 있는 8가지 방향을 dy, dx로 나누어 저장해준다. while문을 이용해 입력받은 값에 대한 섬의 개수를 구해준다. map 배열에 입력받은 값들을 넣어주고, map에 섬이 있는 부분인데 방문을 안 한 부분이라면 dfs를 수행해준다. 그리고 count를 올려준다. 만약 입력받은 w와 h가 0이라면 반복문을 빠져나와준다. #include using namespace st..
[JS] 백준 1018번 - 체스판 다시 칠하기 드디어 브루트 포스 마지막 문제이다. 이제 내일부터는 본격적으로 알고리즘 공부를 시작해야겠다. 문제 1018번 https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 으... 도저히 모르겠어서 다른 분의 풀이를 보고 공부했다. 일단 입력받은 N과 M을 변수에 넣는다. 그리고 비교할 white부터 시작하는 체스판과 black부터 시작하는 체스판도 준비해놓는다. 현재 입력받은 체스판을 board 배열에 넣고 비교할 영역을 선택하여 다시 칠해야하는 ..
[JS] 2839번 - 설탕 배달 이 문제는 자바로도 풀어봤던 문제이다. 문제 2839번 https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 일단 5로 나누어 떨어지지 않는 숫자라면 3을 빼면서 count를 늘려준다. 만약에 3을 뺐을 때 5로 나누어 떨어진다면 5킬로그램 봉지에 다 담아도 된다는 뜻이기 때문에 count를 해당 수만큼 더해준다. 그런데 3을 뺐는데 N이 0보다 작아지게 되면 정확하게 N킬로그램을 만들 수 없다는 뜻이기 때문에 -1을 출력해주면 된다. const readFil..