알고리즘 with 자바 (8) 썸네일형 리스트형 피보나치 수열 with 재귀(메모이제이션) 피보나치 수열의 총 항을 입력받아 피보나치 수열을 출력한다. 예를들어 5를 입력 받으면 1, 1, 2, 3, 5를 출력한다. 재귀함수를 사용해 구현을 할 계획인데 우선 재귀의 기본 형태부터 구현하여 원리를 이해해 본다. public static void main(String[] args) { System.out.println(DFS(5)); } public static int DFS(int n) { if(n == 1) return 1; else if(n == 2) return 1; else return DFS(n - 2) + DFS(n - 1); } 우선 위 코드는 피보나치 수열의 n번째 항을 구하기 위해 이전전항(n-2)와 이전항(n-1)의 항을 재귀하며 값을 구하고 최종 합산하여 결과를 출력한다. 대.. 7. 회문 문자열 문제 설명 문자열이 입력되면 해당 문자열이 회문 문자열이면 "YES", 회문 문자열이 아니면 “NO"를 출력하는 프로그램을 작성하세요. 단, 회문을 검사할 때 대소문자는 구분하지 않습니다. 입력예시: gooG 출력예시: YES 문제 풀이 일반적인 방법은 포문을 반만 돌면서 양끝을 서로 비교해 다른 부분이 있으면 바로 return fasle를 내보내는 방법이다. public String solution(String s) { String result = "YES"; int len = s.length(); s = s.toLowerCase(); for(int i = 0; i < len/2; i++) { if(s.charAt(i) != s.charAt(len-i-1)) { return "NO"; } } retur.. 6. 중복문자제거 문제 설명 소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요. 중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다. 입력예시: ksekkset 출력예시: kset 문제 풀이 이상하게도 중복 제거라는 말이 나오면 Set이나 Map이 먼저 떠오른다. 지금 같은 경우는 Key에 대한 Value는 필요 없는 상황이니 먼저 Set으로 문제를 접근해 본다. public String solution(String s) { Set set = new LinkedHashSet(); for(char c : s.toCharArray()) { set.add(c); } Iterator iter = set.iterator(); String result =""; while(ite.. 5. 특정 문자 뒤집기 문제 설명 영어 알파벳과 특수문자로 구성된 문자열이 주어지면 영어 알파벳만 뒤집고, 특수문자는 자기 자리에 그대로 있는 문자열을 만들어 출력하는 프로그램을 작성하세요. 입력예시: a#b!GE*T@S 출력예시: S#T!EG*b@a 문제 풀이 초기 아이디어는 입력 문자열에서 배열로 변환 후 index를 유지하면서 알파벳만 별도로 분리하고 이를 SpringBuilder 클래스를 통해 reverse하고 원래 문자열에 뒤집힌 문자를 넣어주는 방식이었다. 이를 코드로 구현하면 다음과 같다. public String solution(String s) { char[] result = s.toCharArray(); String alphaString = ""; for(int i = 0; i < result.length; .. 4. 단어 뒤집기 문제 설명 N개의 단어가 주어지면 각 단어를 뒤집어 출력하는 프로그램을 작성하세요. 첫 줄에 자연수 N(3 3. 문장 속 단어 문제 설명 한 개의 문장이 주어지면 그 문장 속에서 가장 긴 단어를 출력하는 프로그램을 작성하세요. 문장속의 각 단어는 공백으로 구분됩니다. 단, 가장 길이가 긴 단어가 여러개일 경우 문장속에서 가장 앞쪽에 위치한 단어를 답으로 합니다. 첫 줄에 길이가 100을 넘지 않는 한 개의 문장이 주어집니다. 문장은 영어 알파벳으로만 구성되어 있습니다. 입력예시: it is time to study 출력예시: study 작성 코드 public class Test01_03 { public static void main(String[] args) { Test01_03 test03 = new Test01_03(); System.out.println(test03.solution( "it is time to study").. 2. 대소문자 변환 문제 설명 대문자와 소문자가 같이 존재하는 문자열을 입력받아 대문자는 소문자로 소문자는 대문자로 변환하여 출력하는 프로그램을 작성하세요. 첫 줄에 문자열이 입력된다. 문자열의 길이는 100을 넘지 않습니다. 문자열은 영어 알파벳으로만 구성되어 있습니다. 입력예시: StuDY 출력예시: sTUdy 작성 코드 public class Test01_02 { public static void main(String[] args) { Test01_02 test02 = new Test01_02(); System.out.println(test02.solution1( "StuDY")); System.out.println(test02.solution2( "StuDY")); } public String solution1(St.. 1. 문자 찾기 문제 설명 한 개의 문자열을 입력받고, 특정 문자를 입력받아 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내는 프로그램을 작성하세요. 대소문자를 구분하지 않습니다.문자열의 길이는 100을 넘지 않습니다. 입력예시: Computercooler, c 출력예시: 2 작성 코드 public class Test01_01 { public static void main(String[] args) { Test01_01 test01 = new Test01_01(); System.out.println(test01.solution( "Computercooler", 'c')); } public int solution(String s, char c) { int result = 0; String upperString .. 이전 1 다음