본문 바로가기

백준/C++

(135)
[C++] 백준 1159번 - 농구 경기 문제 1159번 https://www.acmicpc.net/problem/1159 1159번: 농구 경기 상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작 www.acmicpc.net 입력받은 이름의 첫글자에 해당하는 인덱스를 check 배열에서 1증가시켜준다. 여기서 알파벳에 'a'를 빼주면 해당 글자의 인덱스가 나오게 된다. 즉, 첫 글자가 a라면 'a'를 뺏을 때 0이 나온다. 그렇게 첫 글자의 개수를 다 세면 5이상인 글자가 있는지 확인하여 참가할 수 있다는 표시로 predaja에 false를 해준다. 그리고 모든 알파벳(사전순이기 때문에 a~z순으로)이 저장된..
[C++] 백준 1152번 - 단어의 개수 이분 탐색으로 푸는 문제는 최대나 최소를 구한 문제가 많이 나온다고 한다. 그래서 이분 탐색을 풀려고 했는데... 어려워서 문자열 문제부터 하고 넘어가야겠다는 생각이 들었다. 그래서 오늘의 문제는~~ 문제 1152번 https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 공백을 포함한 문자열을 받아야 하기 때문에 getline 함수를 사용해줘야 한다. getline(cin, 변수); 이런 식으로 사용하면 공백을 포함한 문자열을 입력받을 수 있다...
[C++] 백준 3052번 - 나머지 && 백준 11720번 - 숫자의 합 문제 3052번 https://www.acmicpc.net/problem/3052 3052번: 나머지 각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다. www.acmicpc.net 어제 풀었던 문제와 비슷하게 풀면 될 것 같다. 42로 나눈 나머지니까 0~41까지 나올 수 있다. 그러므로 크기가 42인 배열을 하나 만들어주고 각 입력값에 42를 나눈 나머지를 배열의 인덱스값으로 넣어 1씩 증가시켜준다. 그리고 배열에 들어있는 값이 0이 아니라면 count를 해준다. 그렇게 해주면 한 번 이상 나온 경우를 구할 수 있다. #include using namespace std; int main() { int num[42] = {0};..
[C++] 백준 2577번 - 숫자의 개수 문제 2577번 https://www.acmicpc.net/problem/2577 2577번: 숫자의 개수 첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 크거나 같고, 1,000보다 작은 자연수이다. www.acmicpc.net A*B*C의 결과에 몇개의 숫자들이 모였는지 알기 위해서는 문자열(to_string)로 바꾼 후 length()를 이용하여 크기를 구해야한다. 그렇게 바꾼 문자열에서 각 값(1~9)이 몇 개있는지 체크하고 체크한 배열을 출력해주면 된다. #include #include using namespace std; int main() { int A, B, C; cin >> A >> B >> C; int num = A * B * C; string..
[C++] 백준 1120번 - 문자열 문제 1120번 https://www.acmicpc.net/problem/1120 1120번: 문자열 길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 www.acmicpc.net 어떻게 풀지 고민하다가 찾아보니까 A,B가 가장 겹치는 곳을 count 해주고 그 count에 두 단어의 길이 차이를 더해준다(A의 앞과 뒤에 문자를 추가해주는 경우). B의 길이에서 count를 뺀 만큼이 차이값이므로 이를 출력해주면 된다고 한다. #include #include using namespace std; int main() { ..
[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