본문 바로가기

구현8

[BOJ] 15553번: 난로 문제 링크 2018년 JOI 1번 문제다. 난로가 켜져 있는 시간은 N + α 인 것은 자명하다. 그렇다면 α를 알아야 한다. 성냥이 N보다 부족하면 계속 켜놔야 하는 시간을 알아야 하는데 예제를 보면서 계산하는 것이 좀 더 좋을 것 같다. [예시1] 1 3 6 K가 2일 땐 1 3 사이[1초]나 3 6 사이[2초]를 계속 틀어놔야 할 것이다. 이것에 착안해서 나는 우선순위 큐(오름차순 정렬)를 사용해서 (친구들 방문이 이어져 있지 않을 경우) 일 때 간격을 우선순위 큐에 저장을 시키고, 만약 이어져 있는 경우에는 cnt를 증가시켰다. 그래서 우선순위 큐에서 pop을 시키는 횟수는 가 된다. 난로가 켜져 있는 시간의 최솟값을 구해야 하므로 정답은 이 된다. #include using namespace s.. 2018. 9. 30.
[BOJ] 10545번: 뚜기뚜기메뚜기 https://www.acmicpc.net/problem/10545 만약에 map이 없었다면... 이걸 어떻게 풀었을까 STL을 만들어 주신 모든 분에게 감사드립니다. #include using namespace std; const char alphabet[10][5] = { {}, {}, {"abc"}, {"def"}, {"ghi"}, {"jkl"}, {"mno"}, {"pqrs"}, {"tuv"}, {"wxyz"} }; int main() { ios_base::sync_with_stdio(false), cin.tie(0); string str; map m; for (int i = 1, a; i > a; for (int j = 0; alphabet[a][j]; ++j) m[al.. 2018. 8. 7.
[BOJ] 3054번: 피터팬 프레임 3054번: 피터팬 프레임 배열로 할 수도 있고 직접 출력을 할 수도 있지만 나는 직접 출력하는 방식을 택했다. 만약 배열로 한다면 세로로 보는 것이 편할 것 같다는 생각이다. 풀이 (1번 줄, 5번 줄), (2번 줄, 3번 줄)은 동일하다. 가로길이: 입력된 문자열 길이 * 4 + 1 세로 길이: 5 1번 줄: '#' | '*'이 나오는 위치: 3 7 11 ··· -> i % 4 == 3 *이 나오는 위치: 11 23 ··· -> i % 12 == 11 나머지는 '.'출력 2번 줄: '#' | '*'이 나오는 위치: 짝수 -> i % 2 == 0 '*'이 나오는 위치: 10 12 22 24 ··· -> i % 12 == 10 | i % 12 == 0 나머지는 '.' 출력 가운데: 얘는 까다로워서 문자열.. 2018. 7. 19.
[BOJ] 2941번: 크로아티아 알파벳 2941번: 크로아티아 알파벳 풀이 순서대로 잘 묶어주기~! 코드 #include #include char s[103]; int main() { scanf("%s", s); const int size = strlen(s); int cnt = 0; for (int i = 0; i < size; ++i) { cnt++; if (s[i] == 'c' && (s[i + 1] == '=' || s[i + 1] == '-')) ++i; else if (s[i] == 'd') { if (s[i + 1] == '-') ++i; else if (s[i + 1] == 'z' && s[i + 2] == '=') i += 2; } else if ((s[i] == 'l' || s[i] == 'n') && s[i + 1] == .. 2018. 5. 26.
[BOJ] 2448번: 별찍기 - 11 2448번: 별찍기 - 11 풀이 분할&정복을 하면 된다. 큰 삼각형에서 3개로 삼분할 되는 프랙탈이 생기게 된다. 재귀함수를 사용해 삼분할에서 배열에 할당해주면 된다. 코드 #include #include int n; char arr[3072][6143]; void f(int n, int x, int y) { if (n == 3) { arr[y][x] = arr[y + 1][x - 1] = arr[y + 1][x + 1] = '*'; for (int i = 0; i > 1; f(dv, x, y); f(dv, x - dv, y + dv); f(dv, x + dv, y + dv); } int mai.. 2018. 5. 15.
[BOJ] 2523번: 별찍기 - 13 2523번: 별찍기 - 13 풀이 증가하는 삼각형 만들고 감소하는 삼각형 그려주면 된다. 코드 #include int main() { int n; scanf("%d", &n); for (int i = 0; i < n - 1; ++i, puts("")) { for (int j = 0; j = 0; --i, puts("")) { for (int j = 0; j 2018. 5. 15.
읽고 말하기 수열(개미 수열) C# 구현 읽고 말하기 수열 C# 구현 베르나르 베르베르 작가의 《개미》에서 소개되어서 유명해졌다고 위키피디아에 적혀 있다. 나도 어렸을 때 한 번 본 것 같은데 그 땐 프로그래밍을 안 했겠지..? 규칙 첫 번째 수열: 1 두 번째 수열: 1이 1개 = 11 세 번째 수열: 1이 2개 = 12 네 번째 수열: 1이 1개 2가 1개 = 1121 다섯 번째 수열: 1이 2개 2가 1개 1이 1개 = 122111 여섯 번째 수열: 1이 1개 2가 2개 1이 3개 = 112213 . . . 이런 규칙을 갖고 있는 수열이다. 처음에는 string으로 하려고 했지만 너무나 삽질을 하고 int[]로 돌아갔다... ㅠ 배열을 두 개 만들어서 arr1을 중심으로 두고 arr2를 다른 숫자가 나올 때마다 count를 저장해주는 용도.. 2018. 3. 31.
[BOJ]2783번: 삼각 김밥 2783: 삼각 김밥풀이단순 구현 문제다. 나는 1g 당 가격으로 주어지는 값 마다 비교해서 최소값을 구한 것을 *1000 해주었다. 코드 1234567891011121314151617181920212223#include double MIN(double a, double b, double c){ return a > b / c ? b / c : a;}int main(){ int get; double numx[101], y[101], omg = 0, ori, pri; scanf("%d %d", &pri, &ori); omg = pri / ori; scanf("%d", &get); for (int i = 0; i 2017. 9. 3.