반응형

알고리즘 연습 127

[ 알고리즘 연습 ] 14761. FizzBuzz _ JAVA

문제 풀이 이 풀이법은 「 JAVA 프로그래밍 면접 이렇게 준비한다 」 책을 통해 알게 되었습니다. 참고 자료 https://book.naver.com/bookdb/book_detail.nhn?bid=8655189 JAVA 프로그래밍 면접 이렇게 준비한다 자바 프로그래머의 성공적인 입사/이직을 돕기 위한 면접과 코딩 인터뷰 지침서. 1부는 면접 일반론과 자바 프로그래밍뿐만 아니라 프로그래머에게 꼭 필요한 기본 알고리즘이나 자료구조를 다룬다. 2부는 자바 언어의 기본과 테스트 코드 작성법, 가상머신의 이해 등 자바 핵심을 다룬다.3부는 자바 개발 환경과 관련된 컴포넌트와 프레임워크를 다룬다. 제티, 플레이 프레임워크, REST, 스프링, 하이버네이트, 안드로이드 등 현재 자바 개발 환경에서 많이 사용하는 ..

알고리즘 연습 2019.12.07

[ 백준_BOJ ] 1149. RGB거리 _ JAVA 문제풀이

문제 풀이 어렵지 않게 문제풀이 할 수 있었던 DP 문제입니다. 입력으로 0번째는 빨간색(R), 1번째는 초록(G), 2번째는 파랑(B)로 집을 칠하는 데 필요한 비용의 정보가 주어집니다. 인접한 이웃집에는 같은 색으로 칠할 수 없기 때문에 0번째 집으로부터 시작하여 DP를 이용하여 풀이하였습니다. 2중 for문을 이용하여 바깥 for문은 1부터 N-1까지 모든 집에 대해 최적의 값을 찾기 위해 써주었고 안쪽 for문은 0부터 2까지 집을 빨강, 초록, 파랑으로 색칠할 때의 비용을 구해주었습니다. ※ 문제의 해법은 바로 이전 집까지의 다른 색을 칠한 최소 값에 더해주어 현재의 집을 색칠하는 것입니다. 이를 계속 진행하면 N-1번째 줄에는 마지막 집을 빨강, 파랑, 초록으로 색칠할 때의 최소값이 구해질 것..

알고리즘 연습 2019.10.31

[ 백준_BOJ ] 14501. 퇴사 _ JAVA 문제풀이

문제 풀이 풀이에 대한 여러 방법을 고민해보았던 문제입니다. 처음에는 2차원 배열을 만들어 DP 방식으로 풀려고 했었는데 로직이 생각보다 간단하고 비교 연산이 많지 않아서 재귀를 이용해 풀이하였습니다. 일단 가장 많은 금액을 받기 위해 주어진 일수 동안 할 수 있는 모든 경우를 탐색하며 최적의 값을 찾았습니다. 재귀에서 idx변수는 0번 회의부터 마지막 회의까지 탐색하기 위한 인덱스입니다. 만약 idx번째 회의를 진행할 수 있다면 --> 현재 회의에 걸리는 일수가 N보다 작거나 같다면 ( = idx + T[idx]

알고리즘 연습 2019.10.31

[ SWEA D4 ] 6719. 성수의 프로그래밍 강좌 시청 _ JAVA 문제풀이

풀이 성수가 가질 수 있는 실력의 최대 수치를 찾아야 하므로 입력받은 arr 배열을 정렬해주었습니다. ※ 주의할 점은, 정렬해준 뒤 가장 큰 수 부터 찾으면 최적의 답안이 될 수 없고 선택될 숫자들 중에서 작은 숫자부터 큰 숫자로 찾아 나가야 합니다. 이를 위해서 N-K에서 시작하여 N번째 수까지 선택해주었습니다. 최적의 답안을 찾기 위해 정렬을 하고, 필요한 하는 숫자들만 찾아내도록 조건식만 잘 설정해주면 쉽게 풀 수 있는 문제였습니다. 코드 출처 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWd7sgDatsMDFAUh SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐..

알고리즘 연습 2019.10.23

[ 백준_BOJ ] 2309. 일곱 난쟁이 _ JAVA 문제풀이

문제 풀이 총 아홉명의 난쟁이들의 키가 입력으로 주어집니다. 일곱 명의 난쟁이를 선택하기 위해 아홉명 중에서 두 명이 빠진 경우 중에서 일곱 난쟁이의 키가 100이 되는 경우를 찾았습니다. 먼저 난쟁이들의 키를 입력받았고 sum 변수에 난쟁이들의 키의 합을 저장했습니다. 가능한 경우에 대해서 오름차순으로 출력해야 하므로 Arrays.sort( ) 를 이용해 정렬하고 시작하였습니다. for문을 이용하여 두 명의 난쟁이를 제외시킵니다. 가장 바깥쪽에 있는 i와 j 를 이용해 두 명의 난쟁이를 찾고 만약 이 두 난쟁이의 키 값을 뺀 키의 합이 100이 될 경우 ( = sum - arr[ i ] - arr [ j ] == 100 ) 난쟁이의 키를 출력하도록 해주었습니다. 해당하는 난쟁이 조합을 찾으면 boole..

알고리즘 연습 2019.10.23

[ 백준_BOJ ] 1476. 날짜계산 _ 문제풀이 JAVA

문제 풀이 브루트포스 방식으로 문제를 풀었습니다. year와 연월일에 해당하는 e, s, m 을 모두 1씩 증가시켜주면서 입력으로 주어진 연월일과 같은 출력이 나올 때까지 계속 탐색합니다. 처음에는 % (mod) 연산을 이용해서 풀이를 하려 했지만 예를 들어 e가 16에 해당할 경우 e가 0이 아닌 1로 바뀌어야 하기 때문에 그냥 1씩 증가시켜주었습니다. 코드 출처 https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타내는 수를 E, 태양을 나타내는 수를 S, 달을 나타내는 수를 M이..

알고리즘 연습 2019.10.23

[ 백준_BOJ ] 2636. 치즈 _ 문제풀이 JAVA

문제 풀이 #1. Input( ) 부분 치즈가 있는 부분을 map 배열에 1로 표시해주었고 치즈 수를 세기 위해 cheese 변수를 1씩 ++해주었습니다. #2. Main 부분 Main에서는 while 문에서 치즈의 갯수가 0이 아닐 때까지 Melting( )과 Clear( ) 함수를 계속 반복합니다. 치즈가 모두 녹아서 사라지는 데 걸린 시간을 알기 위해 Time 변수를 while문을 실행할 때마다 1씩 늘려주었고, 모두 녹기 전에 ( Cheeze가 0이 되기 전 ) 남아 있던 치즈의 갯수를 알기 위해 Ctmp 변수에 이전 치즈 값을 저장하였습니다. #3. Melting( ) 부분 이 문제에서 판의 테두리 'X' 부분에는 치즈가 위치하지 않습니다. 이를 이용하여 '치즈가 없는 바깥 부분, 또는 치즈가 ..

알고리즘 연습 2019.10.23

[ 삼성 SW 역량 테스트 A형 기출문제 ] 3190. 뱀 _ JAVA 문제풀이

문제 풀이 #1. 먼저 입력받는 Input( ) 부분입니다. 1. 출발한 지 X초가 지나 방향이 전환됩니다. 그 시간초와 방향 L 또는 D를 기록해둘 큐 pq를 만들었습니다. ( 시간초 , 방향 ) 을 Curve 객체로 묶어 pq에 저장해두었습니다. 2. 2차원 배열 map에 뱀의 몸체가 있는 부분을 map[i][j]에 1로, 사과가 있는 위치는 4로, 아무것도 없거나 사과를 먹고 지나간 자리, 또는 뱀이 지나간 자리는 0으로 기록해둘 수 있도록 map 배열을 사용했습니다. Input( ) 에서는 사과의 위치를 입력받아 4 로 저장해주었습니다. 3. 기본 길이 ( length ) 는 1로 , 진행 시간초 ( = Point ) 는 0으로 초기화 해주었습니다. 처음 시작하는 ( 0, 0 ) 위치에는 뱀이 위..

알고리즘 연습 2019.10.19

[ SWEA_D1 ] 2072. 홀수만 더하기 _ JAVA 문제풀이

풀이 각 테스트 케이스마다 10개의 수를 입력받은 뒤 홀수들만 모두 더해주었습니다. 홀수를 나누는 경우는 % 2 연산을 이용해 나머지가 1인 경우입니다. for문을 이용하여 간단히 풀이할 수 있는 문제였습니다. 코드 출처 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5QSEhaA5sDFAUq&categoryId=AV5QSEhaA5sDFAUq&categoryType=CODE SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com

알고리즘 연습 2019.10.17

[ SWEA_D1 ] 2056. 연월일 달력 _ JAVA 문제풀이

풀이 전역변수를 이용해 daycount라는 배열에 각 달에 해당하는 일 수를 저장했습니다. 배열의 인덱스는 0부터 시작하기 때문에 맨 앞 0번째에는 0을 넣어주었습니다. 날짜는 총 8자리로 구성되기 때문에 앞에 4자리를 짤라 연도를, 그 다음 2자리는 월을 그 다음 2자리는 일 수를 연월일을 잘라주기 위해 subString( ) 함수를 사용하였습니다. 그 다음 if 문을 이용하여 불가능한 날짜들은 -1을 출력하도록 해주었고 연도가 3자리인 경우, 월이 1자리인 경우에 대해 각각 if문으로 처리해주었습니다. 코드 출처 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5QLkdKAz4DFAUq&categoryId=A..

알고리즘 연습 2019.10.17
반응형