백준 130

[백준 / BOJ] 2292번 벌집 (C++, Python)

링크 : https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 문제 문제 풀이 가장 중앙 방, 즉 1번 레이어는 1, 2번 레이어부터 2~7, 3번 레이어는 8~19, 4번 레이어는 20~36.. 즉 6, 12, 18, 24의 등비수열대로 늘어나는 패턴을 확인할 수 있다. 이를 활용해 등비수열의 합을 구하고 늘어난 레이어를 출력해주면 된다. C++ 상세 풀이 더보기 void solution(int N) { int cnt = 1; int layer = 1; w..

[백준 / BOJ] 1712번 손익분기점 (C++, Python)

링크 : https://www.acmicpc.net/problem/1712 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net 문제 문제 풀이 기본 수학 카테고리임에도 불구하고 처음에 별 생각 없이 반복문으로 풀었다가 예제 3번에 의해 시간 초과가 나는 문제이다. 수학으로 풀어야 시간 초과가 나지 않는다. 고정 비용 + 가변 비용 x 𝒳 A A / (C - B) < 𝒳 이 된다. 결국 𝒳를 구해야 하므로 A..

[백준 / BOJ] 1316번 그룹 단어 체커 (C++, Python)

링크 : https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 문제 문제 풀이 C++ 상세 풀이 더보기 아이디어가 떠오르면 구현하기는 아주 쉬운 문제이다. 이것도 알파벳이니 이전 문제들과 똑같은 맥락으로 alphabet 배열을 선언해 모두 0으로 초기화한다. (bool형으로 선언해 false로 초기화하거나 해도 좋다.) 연속으로 계속 같은 문자가 나와야 하므로, 먼저 새로운 알파벳이 나오면 배열에서 1로 변경하고, 이..

[백준 / BOJ] 2941번 크로아티아 알파벳 (C++, Python)

링크 : https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 문제 문제 풀이 처음에는 아무 다른 알파벳도 들어가도 되나 싶어서 푸는 데 조금 오래 걸렸던 문제이다. C++ 상세 풀이 더보기 우선 find함수를 쓰기 위해 vector을 선언해 안에 크로아티아 알파벳들을 넣어준다. 그 후, 크로아티아 알파벳이 없을때 까지 반복한다. 크로아티아 알파벳을 찾는다면 느낌표로 변경해서 출력 조건인 알파벳 갯수를 좀 더 쉽..

[백준 / BOJ] 5622번 다이얼 (C++, Python)

링크 : https://www.acmicpc.net/problem/5622 5622번: 다이얼 첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어의 길이는 2보다 크거나 같고, 15보다 작거나 같다. www.acmicpc.net 문제 문제 풀이 C++ 상세 풀이 더보기 아스키 코드에서 활용했던 개념을 이용하는 문제다. 각 문자에 매칭되는 숫자는 정해져 있으므로 아무래도 배열로 미리 값들을 선언해 두고 활용하는 것이 편할 것이다. void solution(string str) { int num[] = {3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10}; int res = 0; int len = str.l..

[백준 / BOJ] 2908번 상수 (C++, Python)

링크 : https://www.acmicpc.net/problem/2908 2908번: 상수 상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 www.acmicpc.net 문제 문제 풀이 C++ 상세 풀이 더보기 조건 덕분에 별로 어렵지 않았던 문제이다. 숫자에 0이 포함되어 있지 않고, 숫자도 3자리라는 제한 조건이 있으므로 swap과 stoi를 이용해 쉽게 해결할 수 있다. void swap(string& str) { char temp; temp = str[0]; str[0] = str[2]; str[2] = temp; } void solution(string s1..

[백준 / BOJ] 1152번 단어의 개수 (C++, Python)

링크 : https://www.acmicpc.net/problem/1152 1152번: 단어의 개수 첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열 www.acmicpc.net 문제 문제 풀이 C++ 상세 풀이 더보기 공백까지 입력받기 위해 getline을 써 준다. 단어의 앞 뒤로 모두 공백이 올 수 있으므로, isspace 함수를 활용해 공백(탭, 개행 모두 포함)인지 판단한다. 참고로 isspace 함수는 공백이면 0이 아닌 수를 반환한다. void solution(string str) { int len = str.length(); int cnt = ..

[백준 / BOJ] 1157번 단어 공부 (C++, Python)

링크 : https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 문제 문제 풀이 C++ 상세 풀이 더보기 void solution(string str) { int max = 0; int cnt = 0, val = 0; int len = str.length(); for (int i = 0; i < len; i++) { alp[str[i] - 65]++; } for (int i = 0; i < 26; i++) { if (max < alp[i]) { val = i; max = alp[i];..

[백준 / BOJ] 2675번 문자열 반복 (C++, Python)

링크 : https://www.acmicpc.net/problem/2675 2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 문제 문제 풀이 이중 for문을 활용하면 쉽게 풀린다. C++ 코드 전문 HTML 삽입 미리보기할 수 없는 소스 Python 코드 전문 HTML 삽입 미리보기할 수 없는 소스 소감

[백준 / BOJ] 10809번 알파벳 찾기 (C++, Python)

링크 : https://www.acmicpc.net/problem/10809 10809번: 알파벳 찾기 각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출 www.acmicpc.net 문제 문제 풀이 여러 가지 아이디어가 있지만 크기가 26인 배열을 선언해 해결하는 것이 가장 간단해 보인다. C++ 상세 풀이 더보기 do { cin.get(c); i++; if (alp[c - 97] != -1) continue; alp[c - 97] = i; } while (c != '\n'); 알파벳이 26개이므로 배열의 크기는 26으로 설정했다. 다시금 cin / ci..