알고리즘 :: 백준 :: 9375 - 패션왕 신해빈
·
Problem Solving
❔문제 🔗문제링크 🔄 문제 및 입출력 조건 파악입력:테스트케이스 T ≤ 100의상 개수 ≤ 30의상 한 종류는 하나만 입을 수 있음중복 이름 없음, 모두 소문자로 구성출력: 총 경우의 수✏️ 문제풀이 '의상종류'칸에는 하나의 '의상'만 들어갈 수 있습니다.'안 입는다, 안 쓴다' 라는 선택지를 포함하면 위 그림과 같습니다.중요한 것은 '의상종류'와 그 종류에 포함된 의상의 개수입니다. 또한, 의상은 중복해서 입력되지 않습니다.따라서 문자열 '의상종류'와 이에 포함된 의상 개수를 카운트 하기 위해 `std::map`를 사용하는 것이 적절하겠습니다.📝 코드#include using namespace std;int main() { ios::sync_with_stdio(false), cin.tie(null..
알고리즘 :: 백준 :: 1620 - 나는야 포켓몬 마스터 이다솜
·
Problem Solving
❔문제 🔗문제링크 🔄 문제 및 입출력 조건 파악1 ≤ 포켓몬의 개수 N, 문제의 개수 M ≤ 100,000포켓몬 이름 길이 ≤ 20문자열이 입력됐다면? 해당하는 번호 출력자연수가 입력됐다면? 해당하는 문자열 출력✏️ 문제풀이STL 자료구조를 활용할 수 있는지 묻는 기본적인 문제입니다.`std::string`을 key값으로 하는 `std::map`를 만들어 `std::string`이 입력됐을 때는 대응하는 `int`를 출력합니다.`int`를 key값으로 하는 `std::map`을 만들어 `int`가 입력됐을 때는 대응하는 `std::string`을 출력합니다.포켓몬을 입력 받을 때, 이름이 들어올지 번호가 들어올지 모르므로 우선 문자열로 입력 받습니다.만일 입력받은 문자열이 숫자라면, `stoi()` ..
알고리즘 :: 백준 :: 2559 - 수열
·
Problem Solving
❔문제 🔗문제링크 🔄 문제 및 입출력 조건 파악입력: 요소 개수 ≤ 100,000 (-100 ≤ 각 요소 ≤ 100)출력: 연속 K일 합의 최댓값✏️ 문제풀이최대 10만개의 입력이, 각 입력은 -100까지 가능하므로 초깃값은 -10,000,001로 잡는 것이 좋습니다.언제나 문제의 범위 바깥에 초깃값을 두도록 합시다.최댓값을 구해야하면 문제의 범위 바깥에 있는 최솟값으로 시작하고,최솟값을 구해야하면 문제의 범위 바깥에 있는 최댓값으로 시작하는게 중요합니다.1. 누적합을 이용한 풀이 'K'가 주어지기 때문에, 먼저 K일 까지의 합이 초깃값이 됩니다.2일-(K+1)일은 1일-K+1일 합에서 1일-1일 합을 뺀 것과 같다.3일-(K+2)일은 1일-K+2일 합에서 1일-2일 합을 뺀 것과 같다.4일-(K+..
알고리즘 :: 백준 :: 9996 - 한국이 그리울 땐 서버에 접속하지
·
Problem Solving
❔문제 🔗문제링크 🔄 문제 및 입출력 조건 파악입력파일 개수 N ≤ 100각 파일명 길이 ≤ 100인 소문자패턴은 별표(*) 1개가 있는 길이 ≤ 100인 소문자출력패턴 일치 "DA"패턴 불일치 "NE"✏️ 문제풀이주어진 패턴은 별표(`*`)를 기준으로 (접두사) / (`*`) / (접미사) 세 가지 부분으로 나눌 수 있습니다. 입력된 파일명의앞부분('접두사'의 길이만큼)이 '접두사'와 일치해야 하고뒷부분('접미사'의 길이만큼)이 '접미사'와 일치하면 그 파일명은 패턴과 일치한다고 판단합니다.패턴 내에서 `*`의 위치(i.e. `pos`)를 찾으면접두사는 `[0~pos)`까지의 위치,접미사는 `[pos + 1, 패턴길이)`까지의 위치입니다.auto pos = pattern.find('*');patL ..
알고리즘 :: 백준 :: 11655 - ROT13
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악입력: 문자열 S는 소문자, 대문자, 숫자로 이뤄진 ≤ 100이고 띄어쓰기 포함.✏️ 문제풀이소문자 'a'(97)랑 대문자 'A'(65)는 아스키코드 외워두면 편리합니다.띄어쓰기가 포함된 문장 입력이 들어오므로 `getline()` 함수로 입력받습니다.13번째 소문자('m'), 대문자('M')를 기준으로 처리방법이 바뀝니다1~13번째 알파벳(소문자 또는 대문자)라면 그냥 덧셈해주면 됩니다.14~26번째 알파벳이라면 기준 알파벳(m 또는 M)으로부터 몇 칸이나 떨어져있는지 계산한 후 다시 'a'('A')부터 셈해줍니다.📝 코드#include using namespace std;int main() { ios::sync_with_stdio(false), cin..
알고리즘 :: 백준 :: 1159 - 농구 경기
·
Problem Solving
❔문제 🔗문제링크 🔄 문제 및 입출력 조건 파악1 ≤ 선수의 수 ≤ 150각 선수의 성 ≤ 30글자, 소문자로 이뤄짐.성의 '첫 글자'가 같은 선수가 5명이상있다면 해당 첫글자들을 출력없다면 PREDAJA 출력.✏️ 문제풀이중요한 건 입력받은 문자열의 첫 글자입니다.이전 문제(10808 알파벳 개수)에서 다뤘듯이, 소문자에 대응하는 26칸의 카운팅 배열을 만듭니다.각 이름의 첫 글자에 대응하는 배열 값을 증가시킵니다. ( `배열[(첫글자)-'a']++` )카운팅 배열을 순회하며 값이 5 이상이라면 다시 `(인덱스)+'a'`해줘서 소문자로 출력해줍니다.📝 코드#include using namespace std;int main() { ios::sync_with_stdio(false), cin.tie(n..
알고리즘 :: 백준 :: 10988 - 팰린드롬인지 확인하기
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악입력: 길이는 ≤ 100이며 '소문자'로만 이뤄짐.✏️ 문제풀이회문 여부를 판단하는 방법C 방법맨 왼쪽부터 오른쪽 방향으로 향하는 커서맨 오른쪽부터 왼쪽 방향으로 향하는 커서두 커서가 가리키는 문자가 서로 다르거나, 교차할 때까지 진행합니다.무사히 교차했다면 해당 단어는 회문입니다.C++ 방법다른 `std::string`에 단어를 뒤집어서 저장합니다.원본과 뒤집은 복사본을 `=` 연산자로 비교합니다.📝 코드#include using namespace std;int main() { ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); string s; cin >> s; string ss(s);..
알고리즘 :: 백준 :: 2979 - 트럭주차
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악트럭은 총 3개입력1 ≤ 시간 ≤ 100(도착시간) (떠나는시간) 순으로, (도착시간) < (떠나는시간)✏️ 문제풀이시간 `t`일 때, 주차장에 차량이 몇 대있는지 정보를 담고있는 배열 `t`을 만듭니다.`(도착시간) (떠나는시간)`을 입력받았을 때, 배열 `t`는 `t[도착시간]`부터 `t[떠나는시간 - 1]`까지 1 증가합니다.떠나는 시간은 해당 차량이 주차장을 이용하는 시간이 아니므로, 포함해서는 안 됩니다.따라서 요금을 계산할 때 고려해야할 범위는 【도착시간, 떠나는시간) 입니다.요금을 계산할 때 현재 주차장에 있는 차량 수를 놓치면 안 됩니다. (한 대: A원 / 분, 두 대: 2 × B원 / 분, 세 대: 3 × C원 / 분)📝 코드#inclu..
알고리즘 :: 백준 :: 10808 - 알파벳 개수
·
Problem Solving
❔문제  🔗문제링크  🔄 문제 및 입출력 조건 파악입력: '소문자'단어, 길이 ≤ 100✏️ 문제풀이알파벳 소문자는 총 26개이므로 26칸짜리 `int`형 배열을 만듭니다.입력받은 문자열 속 문자를 처음부터 끝까지 하나씩 읽으며 `배열[문자-'a']` 값을 하나씩 증가시키며 카운팅합니다.배열 내 값을 모두 출력하면 정답입니다.📝 코드 #include using namespace std;int main() { ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); array alpha = {0, }; string S; cin >> S; for (char c : S) alpha[c - 'a']++; for (int i : alpha) cou..
알고리즘 :: 백준 :: 2309 - 일곱 난쟁이
·
Problem Solving
❔문제  🔗문제링크  🔄 문제 및 입출력 조건 파악입력: 9명 키, 100을 넘지 않음출력: 키 합 100인 7명 조합 아무거나✏️ 문제풀이난쟁이 9명 중 7명을 뽑아 구한 키의 합이 100일 때 출력하는 bruteforce 문제입니다.9명 중 7명을 뽑는 것($_9C_7$)은, 9명 중 2명을 뽑는($_9C_2$) 경우의 수와 같습니다. 총 인원의 키 합에서 100을 뺀 값을 `diff`라 할 때2중 for문을 돌려서 선택한 2명의 키 합이 `diff`면 출력합니다.재귀함수를 돌려서 2명을 선택하고, 키 합이 `diff`면 출력합니다.오름차순으로 출력해야 하기 때문에, 2중 for문을 돌리던, 재귀함수를 돌리던 먼저 정렬부터 하는 것을 잊지 맙시다.📝 코드2중 for문 방법#include usin..