본문 바로가기

코딩테스트/프로그래머스

(8)
[Java][프로그래머스-코딩테스트 level2] [1차] 뉴스 클러스터링 o 요구사항 입력으로 들어온 두 문자열의 자카드 유사도를 계산하고, 값에 65536을 곱한 후에 정수부만 리턴하기 자카드 유사도는 집합 간의 유사도를 검사하는 방법이다. 두 집합 A, B 사이의 자카드 유사도 J(A, B)는 두 집합의 교집합 크기를 두 집합의 합집합 크기로 나눈 값이다. 자카도 유사도는 집합의 중복된 원소를 허용한다. o 코드진행 주어진 문자열 2개 -> 각각 소문자 변환 -> 영어로된 문자열만 List 생성 -> 두 집합의 자카드 유사도 계산 -> 정수 부분 취하기(리턴) o 코드설계 1) 영대소문자를 구분하지 않는다 -> String 클래스의 toLowerCase() 혹은 toUpperCase() 사용 str.toLowerCase() 2-1) 주어진 문자열을 2개씩 끊어서 새로운 문..
[Java][프로그래머스-코딩테스트 level2] 멀쩡한 사각형 o 요구사항 가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 주어진다. 대각선 꼭지점 2개를 잇는 방향으로 잘렸을때 1cm의 온전한 사각형 개수를 구하기 o 코드진행 1. 길이가 1씩 증가할 때 온전한 사각형은? 가로 width, 세로 height의 직각삼각형을 그릴 수 있다. 여기서 아래쪽 삼각형을 보자. 이 삼각형은 가로가 1씩 증가할 때마다 세로는 얼마나 감소할까. 정답은 height/width 길이만큼 감소하게 된다. 즉, 가로가 width를 width로 나눈 1(=width/width)씩 증가할때 세로는 height/width 만큼 길이가 줄어든다. 가로가 n만큼 이동했을때의 가로세로 1cm온전한 사각형의 개수는 세로길이에서 height/width를 n번 뺀 계산한 값에서 소수점을 버..
[Java][프로그래머스-코딩테스트 level2] 피보나치 수 o 요구사항 2이상의 수 n이 입력되었을 때, n번째 피보나치 수를 1234567로 나눈 나머지를 리턴하기 o 코드진행 1. n번째 피보나치 수 계산하기 피보나치 수는 재귀함수를 사용하면 간단하게 구현할 수 있다. 하지만 그 효율성은 매우 떨어진다. 때문에 문제에서 주어지는 100000이하의 자연수 n번째 피보나치 수를 구하는데는 시간이 많이 소요될 뿐더러 재귀함수가 재귀함수를 끝없이 호출하는 식으로 되어 메모리가 버티질 못한다 for 문을 사용하면 재귀함수 보다 효율적인 함수를 생성할 수 있다. 2. 1234567로 나눈 나머지 계산하기 문제에서 1234567로 나눈 나머지를 리턴하도록 하였으므로 큰 숫자를 계산할 필요가 없다. 임의의 숫자 Number를 K로 나눈 나머지는, Number를 더해서 구성..
[Java][프로그래머스-코딩테스트 level1] 3진법 뒤집기 o 요구사항 자연수 -> 3진법 변환 -> 앞뒤 순서 변환 -> 10진법 변환하여 리턴(int) o 코드설계 1. N진법 변환하기 임의의 수 Number를 N진법으로 변환한 수는 Number가 0이 될 때까지 Number를 N으로 나눈 나머지를 각 자릿값으로 나타낸 값과 같다. 이때 나머지는 마지막에 나온 나머지를 첫숫자로 해서 거꾸로 읽어나간다 2. N진법 숫자 10진법 계산하기 N진법 숫자 Number는 뒤에서부터 N의 0제곱, N의 1제곱... 이런 식으로 진행된다 Number가 위치하는 자릿값과 자릿수를 곱하고 모두 더하면 10진법으로 변환된다 o 완성코드 import java.util.ArrayList; import java.util.List; class Solution { public int ..