Algorithm

    [Java/프로그래머스] 숫자 문자열과 영단어

    문제 풀이 (1) 문제 분석하기 포함될 수 있는 영단어(zero ~ nine)를 담은 String 배열 생성 배열 길이만큼 for문으로 돌면서 입력 받은 문자열에 해당 영단어가 있는지 확인 → contains() 있다면, 해당 영단어를 i로 대체 → replace() String.contains() 특정 문자열 포함 확인 대상 문자열에 특정 문자열이 포함되어 있는 확인하고, true or false를 반환한다. 대/소문자 구분하여 사용이 가능하다. String.replace(찾을 문자열, 바꿀 문자열) 문자열 대체 대상 문자열을 원하는 문자 값으로 변환한다. 차례대로 찾을 문자열과 바꿀 문자열을 입력한다. replace() vs replaceAll() 둘의 차이점은? replaceAll은 정규식 사용이 ..

    [Java/프로그래머스] 문자열 내림차순으로 배치하기

    문제 풀이 (1) 문제 분석하기 문자열을 char 형 배열로 변환 → str.toCharArray() char형 배열을 정렬 → Arrays.sort(charArr) char형 배열을 문자열로 변환 → String str = new String(charArr) 역정렬을 위해 StringBuilder로 받기 → StringBuilder strBuil = new StringBuilder(str) reverse() 적용 → String reversStr = strBuil.reverse().toString() (2) 슈도코드 작성하기 문자열을 char형 배열로 변환 char형 배열을 오름차순으로 정렬 StringBuilder로 받아서 내림차순으로 정렬 하도록 reverse() (3) 코드 구현하기 package..

    [TIL] 2주차 알고리즘 코드 리뷰, Java 스터디

    ✍ Today I Learned Java 스터디 시작 새롭게 한 주가 시작되면서 2주차에 접어들었다. 오전 9시 언어 스터디 발제를 시작으로 6주간의 언어 스터디도 함께 하게 되었다. 지난 pre-onboarding 주차 때 공부했던 책 [혼자 공부하는 자바]를 가지고 매일 하루 30분씩 스터디 조원들과 언어에 대한 기본기를 다지는 시간이다. 우리 조는 월~금까지는 개인 공부를 진행하고 토요일에 각자 맡은 챕터를 발표하기로 했다. 나는 바로 이번주에 함께 공부할 6 챕터 - 클래스를 맡아 발표를 진행하게 되었다. 알고리즘 주간과 같이 진행되기 때문에 조금 부담이 되기도 했는데, 확실히 다른 사람에게 설명해주면서 스스로 더 이해하는 스타일이라 즐거운 시간이 될 것 같다! 알고리즘 코드 리뷰 옆 조의 조원분..

    [Java/프로그래머스] 로또의 최고 순위와 최저 순위

    문제 풀이 (1) 문제 분석하기 두 배열에서 같은 숫자만 일치했을 때 → 최저 순위 (같은 숫자 + 0의 개수) 만큼 일치했을 때 → 최고 순위 순위는 간편하게 배열로 만들어 인덱스로 접근 (2) 슈도코드 작성하기 순위를 인덱스로 접근할 수 있게 score 배열 생성 두 배열의 같은 숫자를 세는 same_nums와 0의 개수를 세는 zero_count 변수 선언 for(lottos의 길이만큼) { for(win_nums의 길이만큼) { if(lottos와 win_nums의 i번째, j번째가 같다면) { same_nums 1 올려주기 } } if(lottos의 i번째가 0이라면) { zero_count 1 올려주기 } } 최고 순위는 socre[same_nums + zero_count] 최저 순위는 soc..

    [TIL] 1주차 알고리즘ㅣ문제 풀이 꿀팁

    나의 알고리즘 풀이 루틴 문제를 조금씩 풀어가며 만들고 있는 나만의 루틴이다. 문제에 따라 30분 ~ 1시간 타이머 시작 손으로 먼저 풀어보기 IDE에 적은 내용을 바탕으로 슈도 코드 주석 달기 코드로 구현하기 에러가 발생했다면 디버깅 모드 적극 활용하기 정해둔 시간 안에 풀지 못했다면 다른 사람 풀이 보고 이해하기 새롭게 알게 된 메서드와 함께 블로그에 정리하기 시간은 좀 걸리더라도 확실히 이해는 되는 중이다. 계속해서 문제를 풀고 있으니 다양한 시도를 해보면서 나에게 맞는 방식을 찾아보자. 문제 풀이 세션 공통 팁 문제를 잘 읽기 요구사항은 꼼꼼하게 읽고, 단순하게 정의해보기 입출력을 참고하자 가만히 있지 않기 입출력 테스트에 필요한 코드를 습관적으로 작성하기 필요한 변수나 자료구조에 대해서 정리하기..

    [Java/프로그래머스] 두 개 뽑아서 더하기

    문제 풀이 (1) 문제 분석하기 더하려는 두 개의 수는 서로 다른 인덱스! 이중 for문을 돌면서 배열에서 나올 수 있는 모든 두 수의 합을 HashSet에 저장 HashSet은 중복을 허용하지 않음 HashSet을 ArrayList로 변환하고 오름차순으로 정렬한 후, Array로 변환 (2) 슈도코드 작성하기 HashSet 생성 for(numbers의 길이만큼) { for(numbers의 길이만큼) { if(i와 j가 같지 않으면) { set에 numbers[i]와 numbers[j]의 합 추가 } } } HashSet을 ArrayList로 변환 int형의 배열을 ArrayList의 size만큼 생성 for(list size만큼) { ArrayList 요소를 모두 int형 배열에 담음 } 배열 오름차순..

    [Java/프로그래머스] 같은 숫자는 싫어

    문제 풀이 (1) 문제 분석하기 연속 숫자는 제거하고, 순서는 그대로 유지! Arraylist 생성하여 입력 받은 array와 비교하고 중복 없도록 list에 추가 list를 array로 변환하여 리턴 (2) 슈도코드 작성하기 Arraylist 객체 생성 list에 arr[0] 추가 for(arr 길이만큼) { if(list의 마지막과 요소와 배열이 일치 하지 않으면) { list에 arr[i] 추가 } } } list를 배열로 변환하여 리턴 (3) 코드 구현하기 package algorithm.test15; import java.util.ArrayList; import java.util.List; public class Solution { public static void main(String[] ar..

    [Java/프로그래머스] 최소직사각형

    문제 풀이 (1) 문제 분석하기 문제에 현혹되지 말자. 결국 긴 변 중에 가장 긴 변과 짧은 변 중에 가장 긴 별을 곱하면 된다. for문과 if문을 중첩으로 사용했더니 바로 시간초과가 나버렸다...! 배열의 정렬을 이용해보자. 최대수, 최소수를 구해주는 Math.max, Math.min을 이용해보자. (2) 슈도코드 작성하기 // 첫번째 풀이 각 변을 담을 int 변수 biggerSideMax, smallerSideMax 선언 for(sizes의 길이만큼) { if(첫번째 요소가 두번째 요소보다 클 때) { if(긴 변의 요소가 biggerSideMax 보다 클 때 { biggerSideMax에 긴 변 요소 담기 } if(짧은 변의 요소가 smallerSideMax보다 클 때) { smallerSide..