반응형

알고리즘 연습 127

[프로그래머스_2018 KAKAO BLIND RECRUITMENT] 1차_뉴스 클러스터링

문제 풀이 2개의 리스트를 활용하여 풀이했던 문제입니다. 1. 먼저 str1과 str2를 모두 toUpperCase()를 사용하여 대문자로 변환해줍니다. 2. list1과 list2를 만들어주고 조건에 맞는(대문자 2자) 문자열을 각각의 list에 담아줍니다. 3. sum (전체 문자열의 갯수)과 same (서로 일치하는 문자열) 을 구해줍니다. 이 과정에서 같은 문자열이 복수적으로 체크될 수 있기 때문에 찾아낸 동일한 문자열은 list에서 삭제해주었습니다. 4. 0 ~ 1 사이의 소수점으로 일치율이 구해지므로 double형으로 일치율을 구해준 뒤 65536을 곱해주어 답을 구해주었습니다. 예외처리로 list의 사이즈가 0이 되는 경우 -> 문자열이 존재하지만 공집합이 되는 경우이므로 answer을 65..

알고리즘 연습 2020.02.02

[백준_BOJ] 4673. 셀프 넘버 _ JAVA

문제 풀이 이 문제를 풀이하기 전에 에라토스테네스의 체에 대해 알고 있다면 풀이에 도움이 될 것 같아 관련 자료를 찾아보았습니다. 출처 : 위키백과 에라토스테네스의 체 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 수학에서 에라토스테네스의 체는 소수(소쑤)를 찾는 방법이다. 고대 그리스 수학자 에라토스테네스가 발견하였다. 알고리즘[편집] 2부터 소수를 구하고자 하는 구간의 모든 수를 나열한다. 그림에서 회색 사각형으로 두른 수들이 여기에 해당한다. 2는 소수이므로 오른쪽에 2를 쓴다. (빨간색) 자기 자신을 제외한 2의 배수를 모두 지운다. 남아있는 수 가운데 3은 소수이므로 오른쪽에 3을 쓴다. (초 ko.wikipedia.org 먼저 셀프 넘버에 ..

알고리즘 연습 2020.01.04

[백준_BOJ] 15596. 정수 N개의 합 _ JAVA

문제 풀이 함수를 선언할 수 있는지를 확인하는 간단한 문제입니다. 입력으로 주어지는 배열 요소들의 총 합을 구하는 문제입니다. for문을 이용해 풀이하였습니다. 매개변수를 활용하는 것과 함수의 형태를 구현할 수 있는지를 확인하는 기본 문제인 것 같습니다. 코드 출처 https://www.acmicpc.net/problem/15596 15596번: 정수 N개의 합 정수 n개가 주어졌을 때, n개의 합을 구하는 함수를 작성하시오. 작성해야 하는 함수는 다음과 같다. C, C11, C (Clang), C11 (Clang): long long sum(int *a, int n); a: 합을 구해야 하는 정수 n개가 저장되어 있는 배열 (0 ≤ a[i] ≤ 1,000,000, 1 ≤ n ≤ 3,000,000) n:..

알고리즘 연습 2020.01.03

[ 삼성 SW 역량 테스트 A형 기출문제 ] 13458. 시험감독 _ JAVA 문제풀이

문제 풀이 2015년 하반기에 출제된 A형 기출 문제입니다. 난이도가 최근 기출 문제에 비해 많이 낮기 때문에 이 정도 난이도의 문제가 다시 나오기는 힘들지 않을까 싶습니다.. 문제에서 시험장의 개수와 각 시험장에 있는 응시자의 수가 주어집니다. 각 시험장마다 총감독관 1명은 반드시 있어야 하고, 부감독관들이 위치합니다. 시험장마다 모든 응시생들을 모두 감시해야 하기 때문에 필요한 감독관의 수를 구하는 문제입니다. #1. 먼저 각 시험장마다 총 감독관 1명은 반드시 있어야 하므로, 각 응시자의 수를 B만큼 빼주었습니다. ( arr[i] -= B ) #2. 남은 응시자의 수를 C로 나누어 answer값에 더해주었습니다. 총감독관이 감시할 수 없는 인원들은 모두 부감독관이 해주어야 하기 때문입니다. ( an..

알고리즘 연습 2020.01.01

[백준_BOJ] 2573. 빙산 _ JAVA

문제 풀이 빙산이 두 덩어리 이상으로 나뉘는 데에 걸리는 시간을 구하는 문제입니다. 이 문제를 풀이할 때 사용한 주요 로직은 위와 같습니다. while문을 이용해 빙산의 조각이 두 덩어리 이상으로 나뉘거나, 모두 녹아 사라질 때까지 반복합니다. 1. melting() : 빙산이 사라질 만큼을 계산해주어야 합니다. 계산을 위해 사용할 배열 copy를 만들어 준 뒤, 상, 하, 좌, 우에 위치한 0을 카운트하여 copy 배열에 저장해주었습니다. 2. calc() : 사라질 빙산이 계산되었다면, copy 배열의 정보를 이용해 빙산을 없애주었습니다. 빙산의 양보다 사라질 양이 많다면 0으로 저장하도록 해주었습니다. 3. checkLand() : 빙산의 덩어리 수를 계산하는 함수입니다. BFS를 이용하여 현재 맵..

알고리즘 연습 2019.12.31

[백준_BOJ] 4344. 평균은 넘겠지 _ JAVA

문제 풀이 가장 먼저 해야 할 일은 평균을 구하는 일인 것 같습니다. N을 입력받은 이후 for문을 이용해 sum변수에 입력되는 수의 총합을 구해줍니다. 그 다음, N으로 나누어서 평균값을 double형 변수 average에 저장해주었습니다. 이때 sum과 N이 int형 변수이기 때문에 sum앞에 '(double)' 실수형으로 강제 형변환해주었습니다. 다음으로 cnt 변수에 평균보다 높은 점수의 수를 세주었습니다. 이후 printf문을 이용해 소수점 3번째 자리까지 출력해주고 "%"를 붙여주었습니다. 로직은 간단하지만 형변환과 printf때문에 출력하기가 까다로운 문제였습니다. 코드 출처 https://www.acmicpc.net/problem/4344 4344번: 평균은 넘겠지 문제 대학생 새내기들의 ..

알고리즘 연습 2019.12.28

[백준_BOJ] 8958. OX퀴즈 _ JAVA

문제 풀이 입력으로 주어지는 문자열의 길이가 다르므로 int형 변수 size를 이용해 input의 길이를 저장합니다. 해당 길이만큼의 char 배열 array와 int형 배열 score를 만들어주었습니다. array에는 OX여부를 저장해두었고 score배열에는 각 단계별 얻을 수 있는 점수를 저장해주었습니다. 계산과정은 아래와 같습니다. 1. sum 변수는 가장 첫 문자가 O일 경우 1점, X일 경우 0점에서 시작합니다. 2. for문을 이용하여 1부터 size길이까지 i번째의 결과가 O라면, 바로 앞 단계(i-1번째)의 점수에 +1한 값을 sum에 더해줍니다. 3. for문이 종료된 뒤 sum 값을 출력해주었습니다. 코드 출처 https://www.acmicpc.net/problem/8958 8958번..

알고리즘 연습 2019.12.28

[백준_BOJ] 1546. 평균 _ JAVA

문제 풀이 간단히 평균을 조작하는 문제입니다. 평균을 조작하기 때문에 소수점 아래까지 다룰 수 있도록 double형으로 array를 만들어주었습니다. (N개) 입력 받으면서 가장 큰 점수를 찾아 max에 저장합니다. (이후 연산에 사용하기 위해) double형 변수 sum을 선언해주고 각각의 점수에 대해 array[i] / max * 100 연산을 처리해준 뒤 sum에 모두 더해줍니다. 마지막으로 sum을 N으로 나눈 결과값을 출력해주었습니다. 문제에서 주어지는 대로 배열을 이용해 입력받고 연산식을 그대로 적용하면 답을 찾을 수 있는 문제입니다. 단 소수점 두 번째 자리까지 정확성을 요구하므로 double형 변수를 이용해주었습니다. 코드 출처 https://www.acmicpc.net/problem/15..

알고리즘 연습 2019.12.28

[백준_BOJ] 3052. 나머지 _ JAVA

문제 풀이 입력으로 주어진 A를 B로 나누었을 때 나머지를 통해 각 숫자가 몇 번 나왔는지를 세기 위해 배열을 활용하는 문제입니다. 나머지는 0부터 41까지가 가능하므로 boolean형 배열 42개짜리를 만들어주었습니다. 그리고 각각의 입력에서 42를 나눈 나머지의 값이 처음 나왔다면 ( !array[in] ) array[in]을 true로 처리해주고 answer값을 1 증가시켜주어 카운팅하였습니다. 10개의 입력으로 위 과정을 반복한 뒤 정답을 출력해주었습니다. 코드 출처 https://www.acmicpc.net/problem/3052 3052번: 나머지 문제 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2,..

알고리즘 연습 2019.12.28

[백준_BOJ] 2577. 숫자의 개수 _ JAVA

문제 풀이 먼저 A, B, C 세 정수를 입력받습니다. 입력 받은 A * B * C 의 결과를 result에 문자열 형태로 저장하였습니다. result에서 숫자 하나씩 떼어 0 ~ 9로 이루어진 배열에 해당 숫자를 1씩 카운트 해주었습니다. 나중에 계수 정렬 (counting sort)에 대해 배운다면 자주 사용하게 될 기법이니 익혀두시길 바랍니다. 주의할 점은 result는 String 형태이므로 숫자 하나씩 떼어낸다면 떼어낸 숫자는 int형이 아니라 char형태입니다. 따라서 array[result.charAt(i)] 가 아닌 array[result.charAt(i)-'0']로 해주셔야 정확한 배열의 위치로 찾아갈 수 있습니다. 카운팅이 모두 끝난 후 0부터 9까지 for문을 이용해 차례대로 출력해주..

알고리즘 연습 2019.12.28
반응형