#INFO 난이도 : BRONZE4 출처 : 1008번: A/B (acmicpc.net) #SOLVE 부동소수점과 정밀도(Precision)에 대한 개념을 알고 있는지 확인하는 문제였다. C/C++은 실수를 표현할 때 부동소수점 자료형인 float과 double을 사용한다. 고정소수점 방식은 부동소수점 방식에 비해 제약이 많기에 사용되지 않는다. 따라서 C/C++에서 실수를 표기할 때 어느정도 한계가 있다. float은 소수점 아래 신뢰 가능 정도는 6자리 double은 소수점 아래 신뢰 가능 정도가 14자리 정도이다. 아래는 printf 함수의 형식 지정자를 이용해 소수점 아래 20자리 까지 출력한 예제이다. 그냥 %lf를 하면 소수점 자릿수가 6자리로 고정되지만, %.nlf를 하면 소수점 자리수가 n..
#INFO 난이도 : SILVER5 출처 : 1475번: 방 번호 (acmicpc.net) #SOLVE 아스키코드를 적절히 사용하면 풀이할 수 있는 간단한 배열 문제였다. 0 ~ 9 번 방 까지의 번호의 개수를 저장할 room 배열을 선언한다. int room[10] = {0, }; 다음으로 문자열로 방번호를 입력받아 필요한 번호판의 개수를 room 배열에 저장한다. 단, 6번과 9번은 뒤집어서 사용할 수 있기에 따로 처리한다. for (int i = 0 ; i < n.length() ; i++) { room[n[i]-48]++; } int sixNine = (room[6] + room[9] + 1) / 2; room[6] = sixNine; room[9] = sixNine; 마지막으로 room 배열을 ..
#INFO 난이도 : BRONZE2 출처 : 1919번: 애너그램 만들기 (acmicpc.net) #SOLVE 애너그램 관계란 두 영어 단어의 철자를 바꾸어 같아지는 경우를 의미한다. 즉, 애너그램 관계가 되기 위해선 두 단어는 알파벳의 순서만 다를 뿐 알파벳의 종류와 수는 모두 동일해야 한다. 풀이는 간단하다. 첫 번째 단어의 알파벳 개수를 저장할 alpha1 배열과 두 번째 단어의 알파벳 개수를 저장할 alpha2 배열을 선언하여 각 단어의 철자의 수를 배열에 저장한다. int alpha1[26] = {0, }; int alpha2[26] = {0, }; int main() { string str1 = ""; string str2 = ""; cin >> str1; cin >> str2; for (in..
#INFO 난이도 : GOLD5 알고리즘 유형 : STACK 출처 : 6198번: 옥상 정원 꾸미기 (acmicpc.net) 6198번: 옥상 정원 꾸미기 문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으 www.acmicpc.net #SOLVE Monotone Stack 개념을 이용하면 쉽게 문제를 풀이할 수 있습니다. Monotone Stack 이란, 뜻 그대로 Monotone(단조로운) Stack(스택) 이라는 의미로 스택을 오름차 혹은 내림차 순으로 유지시키는 방식의 스택입니다. 문제에 Monotone Stack 을 적용시켜 항상 스택을 내림차 순으로 유..
#INFO 난이도 : SILVER1 알고리즘 유형 : DP https://www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net #SOLVE DynamicProgramming 방식을 이용해 문제를 풀이했습니다. dp[i] = i 를 1로 만드는 연산의 최솟값 before[i] = 연산 (1 or 2 or 3) 을 수행하기 직전의 i 값 . ex) before[10] = 9 before 배열은 N을 1로 만드는 방법에 포함되어 있는 수를 출력하기 위해 정의했습니다. 1. X가 3으로 나누어 떨어지면 3으로 나눈다. before[i] = i - 1; if (i % 3 == ..