절단기 높이보다 큰 나무들만 잘릴 때, 적어도 M미터만 자르기 위한 절단기 설정 높이의 최대값을 구하는 문제이다.이분 탐색으로 절단기 설정 높이를 찾는다. mid값이 절단기 높이이며 범위는 1~나무 중 최대 높이이다. 나무의 높이가 절단기 설정 높이보다 클 때 나무가
이분 탐색을 통해 인출 금액의 최소를 찾는다. N일동안 M번 인출할 경우 최소 인출 금액은 일별 용돈 중 최대값이고, 1번만 인출할 경우 최소 인출 금액은 N일 동안 사용할 용돈의 총합이다. 따라서 이분 탐색 범위는 (일별 용돈 중 최대값)~(사용할 용돈의 총합)이다
이분 탐색을 이용해 배정된 예산 중 최대값을 출력한다. 국가 예산 총액보다 지방의 예산 요청 금액의 합이 클 경우 임의로 예산 상한액을 정한다. 요청 예산이 상한액을 초과할 경우 상한액만큼만 배정하고, 상한액 이하일 경우엔 요청 금액을 그대로 배정한다.예산 상한액을 m
선분의 범위 내에 주어진 점이 몇 개 있는지 구하는 문제이다. 순차 탐색으로는 구현하기 쉬운 문제이지만 좌표의 범위가 넓어 이분 탐색을 통해 탐색 시간을 줄여야 했다.선분 위에 위치한 주어진 점의 개수 = 주어진 점의 개수 - 선분 위에 위치하지 않는 점의 개수선분 위
4030번: 포켓볼 풀이 백준 알고리즘 분류가 이분 탐색으로 되어 있지만 이분 탐색을 사용하지 않아도 되는 문제이다. 삼각형과 사각형을 만들 수 있는 수식을 찾아 풀 수 있다. 삼각형을 만들 수 있는 공의 개수는 다음과 같다. | 삼각형 한변의 길이 | 1 |
4030번 포켓볼 풀이 역슬래쉬('\') 포함한 문자열을 출력하기 위한 방법을 알면 풀 수 있다. 역슬래쉬 앞에 ('\')를 한번 더 적어야 한다. 코드
역슬래쉬()와 쌍따움표(")를 포함한 문자열을 출력하는 문제이다.두 문자를 출력하기 위해선 다음과 같이 문자 앞에 역슬래쉬를 한번 더 작성해야 한다.\\ --> \\\\" --> \\"
위와 같이 별을 출력하는 문제이다.반복문을 사용해 별의 개수를 1개씩 늘려가며 출력한다.이중 반복문과 단일 반복문을 사용하는 방법 2가지를 설명한다. Console.Write()와 string 말고 StringBuilder를 사용해 런타임 시간을 줄였다.
위와 같이 첫째 줄부터 N번째 줄까지 오른쪽을 기준으로 정렬한 별을 출력하는 문제이다.문자열끼리 연결하는 작업 시에는 내부적으로 여러 작업이 발생하고, 기존 문자열 값의 길이에 추가된 문자열의 크기를 더한 크기의 새로운 문자열이 생성된다. 즉, string 객체끼리 더
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다. 별은 가운데를 기준으로 대칭이어야 한다.Console.Write()를 많이 사용할수록 런타임 시간이 많이 걸리고, string 덧셈 연산이 많을수록 메모리가 많이 사용된다. 코드는 런타임 시간이 빠른 순서대로 소개한다
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 문제이다.문자열로 받은 N개의 수를 int.Parse() 함수를 이용해 정수로 변환하여 v와 비교한다. 두 값이 같다면 count를 증가시키고 모든 정수에 대해 비교한 후 결과값인 count를 출력한다.
서울의 오늘 날짜를 출력하는 문제이다.날짜와 시간을 나타내는 DataTime을 사용해 현재 날짜와 시간을 가져온다.DataTime.Now로 현재 년도, 월, 일, 시, 분, 초를 확인할 수 있다. yyyy-MM-dd 형식으로 출력해야하므로 ToString을 이용해 문자
10869번 사칙연산 풀이 두 자연수 A와 B가 주어졌을 때 A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 문제이다. ReadLine()으로 문자열로 한 줄을 입력받아 Split()으로 공백을 기준으로 잘라 문자열 배열 s에 저장한다. s의 요
주사위 세개의 값이 같은 눈을 가지는 경우들을 찾아 조건문을 활용해 상금을 구하는 문제이다.
훈제오리구이를 시작하는 시각과 오븐구이를 하는 데 필요한 시간이 분단위로 주어졌을 때, 오븐구이가 끝나는 시각을 계산하는 문제이다.시작 시각의 시를 h, 분을 m, 요리하는데 필요한 시간을 c라고 할 때 오븐 구이가 끝나는 시각의 분은 (m+c) % 60 이다. 시는
원래 설정되어 있는 알람을 45분 앞서는 시간으로 바꾸는 문제이다.설정된 알림의 분단위가 45보다 작다면 45분 앞서 알람을 설정하면 시 단위가 1시간 줄어들게 된다. 이때 설정된 알람의 시 단위가 0 이였다면 1시간 줄어들어 23시로 설정된다.설정된 분 단위가 45
0보다 크거나 같고, 99보다 작거나 같은 정수 N이 주어졌을 때, N의 사이클의 길이를 구하는 문제이다. 사이클은 다음과 같은 과정을 수행한다.주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만든다.각 자리의 숫자를 더한다.주어진 수의 가장 오른쪽 자리 수
30명의 학생 중 과제를 제출한 28명의 출석번호가 주어질 때 과제를 제출하지 않은 2명의 학생의 출석번호를 구하는 문제이다. 이때 제출하지 않는 학생의 출석번호 중 가장 작은 것을 먼저 출력한다.코드를 작성하기 위한 로직은 다음과 같다.30명의 과제 제출 여부 배열을
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지를 구하는 문제이다.나머지를 저장할 배열을 만든다.한줄씩 수를 읽고, 이를 42로 나눈 나머지를 구해 배열에 저장한다.중복을 제거한 배열의 요소 개수를 출력한다.
세준이의 점수 중에 최댓값 M을 찾아 모든 점수를 점수/M\*100으로 고쳤을 때 새로운 평균을 구하는 문제이다.과목의 개수를 입력 받는다.과목별 점수를 입력받아 배열에 저장한다.과목별 점수를 (점수) / M \* 100으로 갱신한다.점수의 평균을 구한다.💡새로운 점
영어 대소문자와 공백으로 이루어진 문자열이 주어질 때, 문자열에 몇개의 단어가 있는지를 구하는 문제이다. 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다. 문자열은 공백으로 시작하거나 끝날 수 있다.문자열을 공백을 기준으로 입력받는다.배열의 원소개수를 구
N을 입력받은 뒤, 구구단 N단을 출력하는 문제이다.문자열을 읽어 int로 변환한 뒤 출력 형식에 맞춰 구구단을 출력하였다.
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 문제이다. 입력이 없다면 Console.ReadLine()은 null 값을 가진다. while문을 통해 한 줄씩 문자열을 입력받다가 문자열이 null이라면 반복문을 종료한다.
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 문제이다.a부터 z까지 반복문을 돌면서 string.IndexOf()를 사용해 문자열에서 알파벳이
어떤 사람의 C언어 성적이 주어졌을 때, 평점은 몇 점인지 출력하는 문제이다.F를 제외한 학점은 E에서 성적의 첫문자를 뺐을 때 X0의 학점이 나온다. → 아스키 코드 계산성적의 첫번 째 문자가 F이면 0이다.성적의 두번 째 문자가 +이면 X0에 +0.3, -이면 X0
어떤 단어를 뒤에서부터 읽었을 때 기존 단어와 똑같다면 yes, 다르다면 no를 출력하는 문제이다. 입력의 마지막 줄에는 0이 주어진다.문자열을 입력받는다.해당 문자열이 "0"이 아닐 때까지 반복문을 실행한다.입력받은 문자열과 문자열을 반전한 값이 같다면 yes를, 다
입출력 방식의 속도에 유의하여 a+b의 결과를 구하는 문제이다.Console.WriteLine()의 호출 횟수가 많을수록 시간이 많이 걸린다. 따라서 출력을 한번에 하기 위해 모든 a+b의 출력값을 하나의 문자열로 만들어 출력하였다.문자열을 이어 만드는 방법에는 2가지
1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다. 같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을
3개의 시간조절용 버튼 A B C가 달린 전자레인지가 있다. 각 버튼마다 일정한 시간이 지정되어 있어 해당 버튼을 한번 누를 때마다 그 시간이 동작시간에 더해진다. 버튼 A, B, C에 지정된 시간은 각각 5분, 1분, 10초이다.냉동음식마다 전자레인지로 요리해야할 시
자연수 N과 정수 K가 주어졌을 때 이항 계수 nCk를 구하는 문제이다.
알파벳 소문자와 대문자로만 이루어진 길이가 N인 단어가 주어졌을 때 한 줄에 10글자씩 끊어서 출력하는 프로그램을 작성하시오.단어를 10글자씩 끊어서 출력하기 위해 Substring()를 사용하였다. 이때 현재 인덱스에서 10을 더한 값이 문자열의 길이보다 크다면 남은
고정비용을 A, 가변비용을 B, 물건 가격을 C라고 할 때, 아래의 식이 성립한다.A + B x (판매량) < C x (판매량)손익분기점은 위 식이 성립되는 판매량의 최솟값이므로 다음의 식이 성립될 때 최초로 이익이 발생한다.A + B x (판매량) = C x (
테스트 케이스 t와 테스트 케이스마다 과목 수 n이 주어질 때, 총 학점과 평점을 출력하는 문제이다.총 학점은 입력으로 주어지는 학점 C의 총합이다.평점은 과목별 학점과 성적의 곱의 합을 총합으로 나눈 값이다.출력 형식을 소숫점 이하 첫번째 자리까지 나타내기 위해 고정
각 참가자가 얻은 점수는 다른 사람이 평가해 준 점수의 합이다. 이 쇼의 우승자는 가장 많은 점수를 얻은 사람이 된다.각 참가자가 얻은 평가 점수가 주어졌을 때, 우승자와 그의 점수를 구하는 문제이다.참가자 별로 얻은 평가 점수의 총합을 구한다.평가 점수 총합 중 최대
이동하는 거리 N이 주어질 때, 건전지 사용량의 최소값을 구하는 문제이다.건전지 사용량을 최소화하기 위해선 순간이동을 최대한 많이 해야한다.현재 위치에서 순간 이동이 가능한 조건은 (현재 위치) x 2가 가능할 때이다.역으로 생각하면 현재 위치를 2로 나누었을 때 나머
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 구하는 문제이다.2차원 배열 clothes의 각 행은 의상의 이름, 의상의 종류으로 이루어져있다. 의상의 종류별 의상의 개수가 필요하기 때문에 Dictionary를 이용해
DFS/BFS 개념 정리 1. 그래프 탐색 알고리즘 그래프 여러 개체들이 연결되어 있는 자료구조 탐색 특정 개체를 찾기 위한 알고리즘 대표적인 문제 유형 경로탐색 유형 (최단거리, 시간) a~b지점까지 가는데 최소 거리/최단 시간 구하기 * 네트워크 유형 (연결)
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수
창영이는 강산이의 비밀번호를 훔치기 위해서 강산이가 사용하는 컴퓨터에 키로거를 설치했다. 며칠을 기다린 끝에 창영이는 강산이가 비밀번호 창에 입력하는 글자를 얻어냈다.키로거는 사용자가 키보드를 누른 명령을 모두 기록한다. 따라서, 강산이가 비밀번호를 입력할 때, 화살표
요세푸스 문제는 다음과 같다.1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.명령은 총 다섯 가지이다.push X: 정수 X를 스택에 넣는 연산이다.pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경
1부터 n까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 이때, 스택에 push하는 순서는 반드시 오름차순을 지키도록 한다고 하자. 임의의 수열이 주어졌을 때 스택을 이용해 그 수열을 만들 수 있는지 없는지, 있다면 어떤 순서로 push