The Way
5월 2일 백준 본문
* 코드는 맨 아래에 있습니다
일단 프로그래밍 감이 조금 떨어진 것 같아서 간단한 문제들 위주로 많이 풀어봤다.
사실 간단한 문제 많이 푸는 것은 실력 향상에 별 도움이 되지 않을 것이다.
# 백준 1620번: 나는야 포켓몬 마스터 이다솜
String<->int를 빠르게 저장하고 사용할 수 있어야 한다.
당연히 map<string, int>이 떠오른다.
# 백준 7785번: 회사에 있는 사람
위 문제와 마찬가지로 문자열 삽입, 삭제, 검색이 용이해야 한다.
* 초보적인 실수지만 문자열 비교할 때
if (buf == "enter")처럼 비교하지 말자.. 참교육당했다.
* String 출력할 때 printf("%s", string)을 쓰려면 string.c_str()과 같이 써주어야 한다.
* set은 자동으로 정렬된 상태로 저장함.
# 백준 6603번: 로또
모든 경우 출력->재귀 사용하면 편함
# 백준 2845번: 파티가 끝나고 난 뒤
# 백준 3460번: 이진수
생략
# 백준 6679번 싱기한 네자리 숫자
* a진법으로 했을 때 n의 각 자리수 합 구하는 방법
int sum, n; while (n) { sum += n % a; n /= a; }
너무 쉽긴 한데 걍 메모용..
# 백준 6378번: 디지털 루트
"수는 최대 1000자리이다" 문제 좀 먼저 잘 읽자 ㅠ
# 백준 15595번: 정답 비율 계산하기
관리자는 아예 제외하고 세기, 문제를 못 맞춘 사람은 포함 x 두 가지 유의할 것
정답 비율 어떻게 계산하는지 항상 궁금했는데 알게 되서 좋다.
정답률 50% 넘는 문제를 바로 못맞췄으면 정답률 깎아먹는 주범(...)
* double의 상대오차는 10^-15 정도. float는 10^-7
# 백준 6321번: IBM 빼기 1
Z -> A로 가는 것에 유의
# 백준 6376번: e 계산
n=3부터는 0으로 끝나는 것이 있음에도 무조건 9자리를 맞추어야 하더라... 참교육당했다
* scanf 자릿수 표현
scanf("%.9f") -> 소숫점 뒤 9자리
scanf("%g") -> 뒤에 0은 생략해줌
# 백준 4641번: Doubles
sorting만 되어있는 구조라면 암거나. 난 set<int> 씀.
# 백준 4690번: 완전 세제곱
9^3 = 1^3 + 6^3 + 8^3이 도대체 왜 없나 했더니 1보다 큰 자연수였다... 문제를 잘 읽어야 고생을 안한다.
# 백준 3474번: 교수가 된 현우
소인수 2의 갯수와 5의 갯수를 살펴봐야 하는데, 당연히 2가 5보다는 많아서 5만 보면 된다.
# 백준 4659번: 비밀번호 발음하기
생략
# 백준 4172번: sqrt log sin
double과 int 처리에 유의하자.
# 백준 4246번: To and Fro
영어문제라서 대충읽었더니 역시 문제 대충읽기의 덫에 빠졌다.
-> <- ->방향을 번갈아가면서 간다. 참고.
# 백준 9938번: 방 청소
오늘 가장 고심한 문제.
처음에는 그래프를 그려서 풀려고 했는데, n = 30만인데 아무리 생각해도 시간이 못 버틸 것 같았다.
40분쯤 고민하니까 disjoint-set 문제라는 것이 보였다.
결국 loop가 생기냐 마냐 문제인데, 한 번 딱 loop가 생길때까지는 괜찮은데
loop의 원소와 연관된 두 번호가 뽑히면 술을 마셔버려야 한다.
연관된 번호를을 merge해주는 것과 loop가 생겼는지 잘 체크해주면 된다.
데이터셋 http://hsin.hr/coci/archive/2013_2014/에 있다.
'PS > 백준 온라인 저지' 카테고리의 다른 글
백준 이전에 푼 것 1 (0) | 2018.05.11 |
---|---|
5월 10일 백준 (0) | 2018.05.11 |
백준 2480번: 주사위 세개 (0) | 2018.02.21 |
백준 4999번: 아! (0) | 2018.02.21 |
백준 9655번: 돌 게임 (0) | 2018.02.21 |