알고리즘 공부

    [백준 17608번-C++] 막대기

    http://acmicpc.net/problem/17608 {코드} #include using namespace std; int main() { int rods[100001], n; scanf("%d", &n); for (int i=0; i=0; i--) { if (max < rods[i]) { max = rods[i]; cnt++; } } printf("%d\n", cnt); } {설명} 이 문제에서는 모든 막대기를 일렬로 나열한 후 오른쪽에서 보기 때문에 어떤 막대기는 오른쪽에 있는 모든 막대기보다 크면 보이게 되는 것입니다. 우선, 가장 오른쪽의 막대기, 즉, 마지막 인덱스의 막대기는 무조건 보이므로 이를 max값으로 잡고 왼쪽으로 하나씩 이동하며 만약 이 max값보다 막대기의 길이가 더 크면 ma..

    [백준 9012번-C++] 괄호

    http://acmicpc.net/problem/9012 {코드} #include #include #include using namespace std; int main() { int n; string s, ans = ""; stack st; cin >> n; while (n--) { cin >> s; stack st; for (const char &c : s) { if (c == '(') { st.push(c); } else { if (!st.empty()) { st.pop(); } else { st.push('('); break; } } } if (!st.empty()) { ans += "NO\n"; } else { ans += "YES\n"; } } cout

    [백준 9093번-C++/파이썬] 단어 뒤집기

    http://acmicpc.net/problem/9093 {코드} #include #include #include using namespace std; int main() { int n; string s; stack st; cin >> n; cin.ignore(); while (n--) { getline(cin, s); s += ' '; for (const char&c : s) { if (c == ' ') { while (!st.empty()) { cout

    [백준 10828번 - C++] 스택

    http://acmicpc.net/problem/10828 {코드} #include #include #include using namespace std; int main() { stack s; int n, tmp; string st; cin >> n; while (n--) { cin >> st; if (st == "push") { cin >> tmp; s.push(tmp); } else if (st == "top") { if (!s.empty()) { cout

    [백준 19940번-파이썬/Python] 피자 오븐

    http://acmicpc.net/problem/19940 {코드}for _ in range(int(input())): n = int(input()) buttons = [0]*5 sixties, tens, ones = n//60, (n % 60)//10, n % 10 if ones > 5: tens += 1 ones -= 10 if tens > 3: sixties += 1 tens -= 6 if tens = 0)] = abs(tens) buttons[4-(ones >= 0)] = abs(ones) print(*buttons){설명}먼저 각 버튼을 누를 횟수를 저장할 ..

    [백준 19939번-파이썬/Python] 박 터뜨리기

    http://acmicpc.net/problem/19939 {코드} def solution(): n, k = map(int, input().split()) sum_minimum = k*(k+1)//2 if sum_minimum > n: return -1 if (n-sum_minimum) % k == 0: return k-1 else: return k print(solution()) {설명} K개의 바구니에 들어있는 공의 개수가 1개 이상이며 전부 달라야 하기 때문에 공의 최솟값은 k(k+1)/2이다. 그림처럼 각 바구니가 순서대로 공의 개수가 결정된다면 전의 바구니보다 1개 더 많을 때가 최소이기 때문이다. 그렇다면 최솟값보다 공의 개수가 적으면 -1을 반환하면 된다. 공의 개수가 더 많을 경우 1부터 ..

    [백준 11653번-파이썬/Python] 소인수분해

    http://acmicpc.net/problem/11653 {코드} n = int(input()) for i in range(2, n): if i*i > n: break while n%i == 0: print(i) n //= i if n > 1: print(n) {설명} 이 문제의 요점은 while문 안으로 들어가는 i가 무조건 소수라는 것이다. 그 이유는 어떤 수 n은 어떤 소수로 나누어지지 않을때까지 나누면 그 소수의 배수들로는 나누어지지 않기 때문이다. (예: n = 2^7 * 3^2 * 7*8이면 2로 나누면 2의 배수가 아니게 된다) 그리고 n의 약수는 루트n까지만 확인하면 되기 때문에 i*i가 n보다 크면 반복문을 나온다. 반복문을 마친 n이 1보다 크면 n이 소수이기 때문에 출력한다. (6일..

    {프로젝트 오일러/Project Euler} 11. 격자 속 연속된 수의 곱의 최댓값

    한국어/Hackerrank - 한국어 버전과 문제가 다를 수 있습니다. 채점은 Hackerrank를 추천합니다. 격자의 크기 = 20x20, 0

    {프로젝트 오일러/Project Euler} 10. 소수들의 합

    한국어/Hackerrank - 한국어 버전과 문제가 다를 수 있습니다. 채점은 Hackerrank를 추천합니다. 1

    {프로젝트 오일러/Project Euler} 9. 특별한 피타고라스 수

    한국어/Hackerrank - 한국어 버전과 문제가 다를 수 있습니다. 채점은 Hackerrank를 추천합니다. 1