📊 Algorithm&SQL

    [Java/프로그래머스] 이상한 문자 만들기

    문제 풀이 (1) 문제 분석하기 문자열 전체의 짝/홀수 인덱스가 아닌 공백을 기준으로 단어별 짝/홀수 인덱스 입력 받은 문자열 전체를 반복문으로 돌면서 각 단어의 짝/홀수 인덱스를 판단 공백을 만나면 인덱스를 판단하는 변수 0으로 초기화 (2) 슈도코드 작성하기 정답을 담을 answer 변수 선언 단어 안에서의 인덱스를 카운트 해 줄 index 변수 선언 for(입력 받은 문자열의 길이만큼){ if(공백을 만나면){ index 초기화 answer에 공백 추가 }else if(index가 짝수면){ answer에 i번째 문자열을 대문자로 추가 index++ }else if(index가 홀수면){ answer에 i번째 문자열을 소문자로 추가 index++ } } 정답 변수 answer 반환 (3) 코드 구현..

    [Java/프로그래머스] 완주하지 못한 선수

    문제 풀이 (1) 문제 분석하기 단 하나의 요소만 다른 2개의 배열을 비교하기 위해 두 배열 모두 정렬 → Arrays.sort() 완주자 배열을 기준으로 반복문을 돌면서 각각 i번째의 요소를 비교하고 일치하지 않으면 반환 → 이때 문자열 비교는 equals() 반환되는 값 없이 마지막까지 돌았다면 참가자 배열의 마지막 요소를 반환 (2) 슈도코드 작성하기 정답을 담을 answer 변수 선언 참가자 배열 오름차순 정렬 완주자 배열 오름차순 정렬 for(완주자 배열의 길이만큼) { if(참가자 배열의 i번째와 완주자 배열의 i번째가 다르면) { answer 변수에 참가자 배열 i번째 요소 넣기 break; }else if(i와 참가자 배열의 길이 -1 이 같다면) { answer 변수에 참가자 배열의 마지..

    [Java/프로그래머스] 수박수박수박수박수박수?

    문제 풀이 (1) 문제 분석하기 n의 길이의 짝홀수를 판별하여 i가 짝수이면 "수"를, 홀수이면 "박"을 더함 (2) 슈도코드 작성하기 정답을 담을 String 변수 answer를 선언 for(입력 받은 변수 n까지) { n 길이의 짝홀수를 판별하여 "수" or "박"을 answer 변수에 담음 } answer 반환 (3) 코드 구현하기 package algorithm.test03; public class Solution { // n까지 for문을 돌면서 // i가 짝수이면 "수"를 붙이고 // i가 홀수이면 "박"을 붙인다 public static String solution(int n) { String answer = ""; for (int i = 0; i < n; i++) { answer += (i..

    [Java/프로그래머스] 나누어 떨어지는 숫자 배열

    문제 풀이 (1) 문제 분석하기 arr의 길이는 정해져 있지 않으므로 배열 대신 Arraylist 사용 // 선언 List list = new ArrayList(); // add 메서드로 요소 추가 list.add(element) // list의 길이 list.size() // 리스트 오름차순으로 정렬 Collections.sort(list); // index에 접근 list.get(i) // String 타입의 List를 배열로 변환할 때 // int 형과 같은 primitive 타입 X stringList.toArray(new String[0]) return 타입이 int 타입의 배열이기 때문에 다시 배열로 변환하여 출력 (2) 슈도코드 작성하기 int타입 Arraylist 선언 for(입력 받은 배..

    [Java/프로그래머스] 2016년

    문제 풀이 (1) 문제 분석하기 각 요일을 배열로 선언 전체 월의 마지막일을 배열로 선언(1일은 금요일이므로 index 1이 금요일이 될 수 있게) 입력받은 날짜까지의 총 일수를 계산하고 7로 나눈 나머지로 요일 배열에 index로 접근 (2) 슈도코드 작성하기 요일 배열 선언 전체 월의 마지막일 배열 선언 for(입력 받은 월 - 1 만큼) { 전체 월의 마지막 일 배열 돌면서 총일수 구하기 } 총일수에 b를 더하고 7로 나눈 값을 int형 변수에 담기 int형 변수로 요일 배열에 index로 접근하여 출력 (3) 코드 구현하기 package algorithm.test01; public class YearOf2016 { public static void main(String[] args) { // 요일..

    [Java/백준] 주몽 #1940

    문제 풀이 (1) 문제 분석하기 두 재료의 번호의 합, 크기를 비교하므로 먼저 정렬하고 시작 N의 최대 범위가 15,000이므로 O(nlogn) 시간 복잡도 알고리즘(=정렬 알고리즘)을 사용해도 문제없음 정렬한 다음 양쪽 끝의 위치를 투 포인터로 지정해 접근(데이터가 유니크하고 한 번 쓰면 없어진다? → 투 포인터) (2) 손으로 풀어 보기 재료 데이터를 A[N]에 저장한 후 오름차순으로 정렬 투 포인터 i, j를 양쪽 끝에서부터 포인터 이동 원칙에 맞게 탐색 2단계를 i와 j가 만날 때까지 반복, 반복이 끝나면 count 출력 (N번만에 탐색이 끝남, 투 포인터는 시간 복잡도에 영향이 거의 없음) // 투 포인터 이동 원칙 A[i] + A[j] > M : j--; // 번호의 합이 M보다 크면 큰 번호..

    [Java/백준] 연속된 자연수의 합 구하기 #2018

    문제 풀이 (1) 문제 분석하기 N의 최댓값(10,000,000)이 매우 크므로 O(n)의 시간 복잡도 알고리즘 사용해야 함 → 투 포인터! 시작 인덱스와 종료 인덱스를 투 포인터로 지정하여 접근 (2) 손으로 풀어 보기 N값을 입력받아 변수에 저장하고, 사용할 변수(sum, count, start_index, end_index) 모두 1로 초기화 (count를 1로 초기화하는 이유는? 연속된 수가 자기 자신인 경우를 미리 포함한 것) 투 포인터 이동 원칙을 활용해 배열의 끝까지 탐색하면서 합이 N이 될 경우의 수를 구함 2단계를 end_index가 N이 될 때까지 반복 포인터가 이동할 때마다 현재의 총합과 N을 비교해 값이 같으면 count를 1만큼 증가 // 투 포인터 이동 원칙 sum > N : s..

    [Java/백준] 구간 합 구하기 #11659

    문제 풀이 (1) 문제 분석하기 수의 개수 N과 합을 구해야 하는 횟수 M은 최대 100,000 임 최악의 경우, 1억 회 이상 연산을 해야 하므로 1초 안에 계산을 끝낼 수 없음 → 구간 합 사용! (2) 손으로 풀어보기 // 합 배열 공식 S[i] = S[i-1] + A[i] // 구간 합 공식 S[j] - S[i-1] N개의 수를 입력받으면서 바로 합 배열 생성 i부터 j까지 구간 합 공식으로 정답 출력 배열의 index는 0부터, 합 배열의 index는 1부터 시작한다는 것에 주의하기! (3) 슈도코드 작성하기 N(숫자의 개수), M(질의 개수) 저장하기 for(1부터 N 까지) { 합 배열 생성하기(S[i] = S[i - 1] + A[i] } for(0부터 M 전까지) { 질의 범위 받기(i ~..