알고리즘 :: 백준 :: 2852 - NBA 농구
·
Problem Solving
https://www.acmicpc.net/source/88151964  ❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악득점 개수 1 ≤ N ≤ 100각 득점 정보는 문자열로 "mm:ss" 형식출력: 1번팀이 이기고 있던 시간, 2번팀이 이기고 있던 시간✏️ 문제풀이1. 시간(초)을 하나의 칸으로 생각하는 방법'분'과 '초' 서로 다른 단위가 있을 때는 어느 한 쪽 단위로, 되도록이면 작은 단위로 통일하는 것이 좋습니다.농구경기 48분을 초로 환산하면 2,880초이므로 전체 농구경기를 연속된 2,880칸으로 표현할 수 있습니다. 문자열 "mm:ss"가 주어졌을 때, `int` 타입의 초로 환산하는 방법은 다음과 같습니다.60 * stoi(line.substr(0, 2)) + stoi(line.subst..
알고리즘 :: 백준 :: 2870 - 수학숙제
·
Problem Solving
❔문제 🔗문제링크🔄 문제 및 입출력 조건 파악1 ≤ N ≤ 100소문자와 숫자로만 이루어진 문자열 길이 ≤ 100✏️ 문제풀이생각해야 할 반례가 많아서 조금 복잡한 문제입니다.반드시 조건을 먼저 정리하고, 어느정도 손코딩을 마친 뒤에 코딩에 들어가야 햇갈리지 않습니다. 문자열을 처음부터 끝까지 읽다가 숫자를 만난다면,'0'으로 시작하는 숫자인 경우'0'이 아닌 문자 (숫자 또는 소문자)가 나올 때까지 스킵합니다. (단순히 인덱스 변수 증가)이때 세 가지 경우가 발생합니다.다른 숫자를 만난 경우: 아래 '0'으로 시작하는 숫자가 아닌 경우로 이동 후 처리됩니다.소문자를 만난 경우: "00000... " 같은 경우였네요, 토큰을 "0"으로 초기화 해줍니다.문자열 범위를 벗어난 경우 (즉, 문자열 가장 뒤..
알고리즘 :: 백준 :: 1213 - 팰린드롬 만들기
·
Problem Solving
❔문제 🔗문제링크 🔄 문제 및 입출력 조건 파악입력: 알파벳 대문자로만 된 최대 50글자 문자열출력:팰린드롬을 만들 수 있다면, 팰린드롬을 출력하고팰린드롬을 만들 수 없다면, "I'm Sorry Hansoo"를 출력✏️ 문제풀이팰린드롬을 만들기 위해서는 반드시 문자열이 중간지점을 기점으로 대칭이어야 합니다.대칭이 되기 위해서는, 홀수번 등장하는 알파벳이 없거나 1개만 존재해야 합니다.즉, 홀수번 등장하는 문자가 2개 이상이라면, 해당 문자열은 팰린드롬을 만들 수 없습니다. 이런 맥락에서 보면, 팰린드롬은 다음과 같은 형태입니다.2회 이상 등장한 문자들을 각각 등장횟수 절반만큼 먼저 사전순으로 나열합니다.이렇게 나열한 문자열은 접두사(prefix)입니다. 나중에 이걸 뒤집어서 뒤에 붙이면, 모든 등장횟..
알고리즘 :: 백준 :: 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);..
알고리즘 :: 백준 :: 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..