본문 바로가기

전체 글

(371)
[BOJ 6603][DFS][JAVA] 로또 [문제] 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34]) 집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오. [풀이 방법] 총 6개의 숫자를 고르는 경우의 수를 구하는 문제입니다. K의 범위가 6 ~ 13 이기..
[SWEA 1984][D2][JAVA] 중간 평균값 매기기 [문제] https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pw_-KAdcDFAUq&categoryId=AV5Pw_-KAdcDFAUq&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com [풀이 방법] 입력 받은 수들을 올림차순 혹은 내림차순으로 소트하고 맨 앞과 맨 뒤 원소를 제외한 수들을 모두 더해 평균을 구합니다. 평균은 Double로 해야 소수점 첫번째 자리에서 반올림이 가능하기 때문에 int가 아닌 Double로 선언한 후 평균을 더할 때 역시 int가 아닌 Double 형으로..
[SWEA 1983][D2][JAVA] 조교의 성적 매기기 [문제] https://swexpertacademy.com/main/code/problem/problemSolver.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com [풀이방법] 중간(35%) / 기말(45%) / 과제 (20%) 비율을 계산해서 계산 결과를 Double 형 변수에 저장합니다. 학점을 알고 싶은 학생의 번호를 찾아가는 것이기 때문에 본래 받은 순서(출석 번호라고 간주)를 유지할 필요가 있습니다. 하지만 소팅을 해야 학점을 매길 수 있기 때문에 여기서 hashmap을 사용했습니다. HashMap 을 사용해서 학생의 번호와 계산한 결과값을 넣은 후 스태틱 메소드를 사용해서 소트해줍니다. ..
[SWEA 1859][D2][JAVA] 백만장자 프로젝트 [문제] https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc&categoryId=AV5LrsUaDxcDFAXc&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com [풀이방법] 처음에는 DP 푸는 방식처럼 [현재까지 계산한 이득 비용, 현재 가격 * 물건의 개수 - 이전 비용들의 합] 에서 큰 값을 계산해서 DP 배열에 저장한 후에 개 중 가장 큰 값을 구하려고 했더니 세번째 테스트 케이스가 맞지 않아 다시 생각해야 했습니다. 3 5 9 -> 이 경우에는 첫째 날..
[SWEA 1986][D2][JAVA] 지그재그 숫자 [문제] 1부터 N까지의 숫자에서 홀수는 더하고 짝수는 뺐을 때 최종 누적된 값을 구해보자. [풀이방법] mod 연산을 이용하여 홀수/짝수를 판단한 후에 연산을 진행하면 됩니다. for (int k = 0; k
[SWEA 1989][D2][JAVA] 초심자의 회문검사 [문제] "level" 과 같이 거꾸로 읽어도 제대로 읽은 것과 같은 문장이나 낱말을 회문(回文, palindrome)이라 한다. 단어를 입력 받아 회문이면 1을 출력하고, 아니라면 0을 출력하는 프로그램을 작성하라. [풀이방법] 문자열의 길이 중간 (N/2)에서부터 한칸씩 앞뒤로 전진하며 동일한지 아닌지 판단하면 됩니다. for (int k = 0; k
[BOJ] 11066. 파일 합치기 문제 소설가인 김대전은 소설을 여러 장(chapter)으로 나누어 쓰는데, 각 장은 각각 다른 파일에 저장하곤 한다. 소설의 모든 장을 쓰고 나서는 각 장이 쓰여진 파일을 합쳐서 최종적으로 소설의 완성본이 들어있는 한 개의 파일을 만든다. 이 과정에서 두 개의 파일을 합쳐서 하나의 임시파일을 만들고, 이 임시파일이나 원래의 파일을 계속 두 개씩 합쳐서 소설의 여러 장들이 연속이 되도록 파일을 합쳐나가고, 최종적으로는 하나의 파일로 합친다. 두 개의 파일을 합칠 때 필요한 비용(시간 등)이 두 파일 크기의 합이라고 가정할 때, 최종적인 한 개의 파일을 완성하는데 필요한 비용의 총 합을 계산하시오. 예를 들어, C1, C2, C3, C4가 연속적인 네 개의 장을 수록하고 있는 파일이고, 파일 크기가 각각 4..
[SWEA 2005][D2][JAVA] 파스칼의 삼각형 [문제] 크기가 N인 파스칼의 삼각형을 만들어야 한다. 파스칼의 삼각형이란 아래와 같은 규칙을 따른다. 1. 첫 번째 줄은 항상 숫자 1이다. 2. 두 번째 줄부터 각 숫자들은 자신의 왼쪽과 오른쪽 위의 숫자의 합으로 구성된다. [풀이방법] (0,0) (1,0) (1,1) (2,0) (2,1) (2,2) (3,0) (3,1) (3,2) (3,3) (0,0)을 기준으로 왼쪽은 x좌표만 1씩 증가하는 좌표와, 오른쪽은 x와 y가 동일한 좌표는 모두 1입니다. 이 특징을 이용해서 (i, j)라고 한다면 j == 0 일 때 (i+1, j)는 1 i == j 일 때 (i+1, j+1)은 1 그 외에는 (i, j) 는 (i-1, j-1) + (i-1, j)의 합 for (int i = 0; i