알고리즘/BOJ 1235

백준 16637번 괄호 추가하기

문제 링크입니다: https://www.acmicpc.net/problem/16637 16637번: 괄호 추가하기 길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순� www.acmicpc.net 재미있게 푼 DFS 문제였습니다. 연산자들의 우선순위가 같고 중첩된 괄호를 허용하지 않기 때문에 재귀함수를 통해 아래의 2가지 경우의 수를 진행하면 풀리는 간단한 문제였습니다. 1. 괄호로 묶지 않고 바로 다음 숫자와 연산 2. 괄호로 묶고 다음 숫자와 다다음 숫자를 연산한 결과와의 연산 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓..

알고리즘/BOJ 2020.05.24

백준 1019번 책 페이지

문제 링크입니다: https://www.acmicpc.net/problem/1019 1019번: 책 페이지 첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 출력한다. www.acmicpc.net 백준님의 풀이 https://www.slideshare.net/Baekjoon/baekjoon-online-judge-1019를 참고하여 코드를 작성했습니다. 우선, 주어진 N의 범위가 최대 10억이기 때문에 하나하나 계산하면 TLE가 발생하는 것은 자명합니다. 따라서, 규칙을 찾고 수식을 작성해야하는데 문제를 [A, B] 사이 0 ~ 9 등장 횟수를 세는 것으로 변형시키면 생각보다 간단하게 풀 수 있는 문제였습니다. A의 일의 자리 숫자가 0이고, B의 일의 ..

알고리즘/BOJ 2020.05.22

백준 13904번 과제

문제 링크입니다: https://www.acmicpc.net/problem/13904 13904번: 과제 예제에서 다섯 번째, 네 번째, 두 번째, 첫 번째, 일곱 번째 과제 순으로 수행하고, 세 번째, 여섯 번째 과제를 포기하면 185점을 얻을 수 있다. www.acmicpc.net 오랜만에 그리디 문제였습니다. 알고리즘은 아래와 같습니다. 1. 입력값들을 점수를 기준으로 내림차순 정렬을 하고 점수가 같다면 마감일이 빠른 순대로 정렬을 진행합니다. 2. 이제 [0, N) 까지 정렬된 배열을 돌면서 v[i].dueDate 날 수행할 과제 점수를 dayScore 배열 v[i].dueDate 번째 인덱스에 넣어줍니다. 2.1 while문은 (v[i].dueDate - 1) 번째 날부터 첫 날까지 순회하며 과..

알고리즘/BOJ 2020.05.21

백준 1949번 우수 마을

문제 링크입니다: https://www.acmicpc.net/problem/1949 1949번: 우수 마을 첫째 줄에 정수 N이 주어진다. (1≤N≤10,000) 둘째 줄에는 마을 주민 수를 나타내는 N개의 자연수가 빈칸을 사이에 두고 주어진다. 1번 마을부터 N번 마을까지 순서대로 주어지며, 주민 수는 10,000 �� www.acmicpc.net 트리 자료구조를 활용한 DP 문제였습니다. 알고리즘은 아래와 같습니다. 1. 나라가 트리 구조로 이루어지고 있기 때문에 우선 트리의 구조를 createTree 함수를 통해 구성합니다. 1.1 트리의 경우 사이클을 이루지 않기 때문에 어느 마을이나 root 로 선정해도 됩니다. 따라서 편리하게 마을 번호의 시작점인 1을 루트로 지정했습니다. 2. func 함수..

알고리즘/BOJ 2020.05.18

백준 15829번 Hashing

문제 링크입니다: https://www.acmicpc.net/problem/15829 15829번: Hashing APC에 온 것을 환영한다. 만약 여러분이 학교에서 자료구조를 수강했다면 해시 함수에 대해 배웠을 것이다. 해시 함수란 임의의 길이의 입력을 받아서 고정된 길이의 출력을 내보내는 함수로 정� www.acmicpc.net 이 문제를 풀기 위해서는 모듈러 연산의 속성에 대해 알고 있어야 했습니다. 모듈러 연산의 속성은 아래와 같습니다. 1. (a + b) mod n = {(a mod n) + (b mod n)} mod n 2. (a - b) mod n = {(a mod n) - (b mod n)} mod n 3. (a * b) mod n = {(a mod n) * (b mod n)} mod n ..

알고리즘/BOJ 2020.05.18

백준 16500번 문자열 판별

문제 링크입니다: https://www.acmicpc.net/problem/16500 16500번: 문자열 판별 첫째 줄에 길이가 100이하인 문자열 S가 주어진다. 둘째 줄에는 A에 포함된 문자열의 개수 N(1 ≤ N ≤ 100)이 주어진다. 셋째 줄부터 N개의 줄에는 A에 포함된 단어가 한 줄에 하나씩 주어진다. A에 �� www.acmicpc.net 오랜만에 풀어보는 DP 문제였습니다. 가지치기만 적당히 해준다면 쉽게 풀 수 있는 문제입니다. 알고리즘은 아래와 같습니다. 1. S 문자열 idx번째 인덱스부터의 부분문자열이 A에 포함된 단어 중 하나와 일치하는지를 확인합니다. 2. 일치한다면 (idx + 부분문자열의 길이) 번째부터의 부분문자열이 또 A에 포함된 단어 중 하나와 일치하는지를 확인합니다..

알고리즘/BOJ 2020.05.14

백준 1059번 수2

문제 링크입니다: https://www.acmicpc.net/problem/1059 1059번: 수2 첫째 줄에 Lucky Set에 포함된 숫자의 개수 L이 주어진다. 둘째 줄에는 L개의 수가 주어진다. 이 수는 1,000보다 작거나 같은 자연수이고, L은 50보다 작거나 같은 자연수이다. 그리고 중복되지 않는다 www.acmicpc.net 여기서 핵심은 N의 상대적인 위치를 파악하는 것이였습니다. 우선, 주어진 N이 이미 Lucky Set에 포함되어 있다면 Unlucky Set 구간이 없기 때문에 0을 출력해줍니다. 주어진 N이 Lucky Set에 포함되어 있지 않다면 Unlucky Set 구간의 시작과 끝 즉, left와 right을 구해줍니다. 이 때 left와 right은 모두 Lucky Set에..

알고리즘/BOJ 2020.05.08

백준 2592번 대표값

문제 링크입니다: https://www.acmicpc.net/problem/2592 2592번: 대표값 어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50의 평균은 이 된다. 평균 이외의 또 다른 대표값으로 최빈값이라는 것이 있다. 최빈값은 주어진 수들 가운데 가장 많이 나타나는 수이다. 예를 들어 10, 40, 30, 60, 30, 20, 60, 30, 40, 50 이 주어질 경우, 3 www.acmicpc.net 저 같은 경우 최빈값을 구할 때 pair형 배열을 선언하여 구했지만 더 쉬운 방법이 있을 것이라고 판단됩니다. 개발환경:..

알고리즘/BOJ 2020.05.03

백준 2581번 소수

문제 링크입니다: https://www.acmicpc.net/problem/2581 2581번: 소수 M이상 N이하의 자연수 중 소수인 것을 모두 찾아 첫째 줄에 그 합을, 둘째 줄에 그 중 최솟값을 출력한다. 단, M이상 N이하의 자연수 중 소수가 없을 경우는 첫째 줄에 -1을 출력한다. www.acmicpc.net 에라토스테네스의 체를 이용하면 쉽게 풀 수 있는 문제였습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

알고리즘/BOJ 2020.05.03

백준 2476번 주사위 게임

문제 링크입니다: https://www.acmicpc.net/problem/2476 2476번: 주사위 게임 첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다. www.acmicpc.net 문제에서 주어진대로 그대로 코딩하면 되는 문제였습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

알고리즘/BOJ 2020.05.01