본문 바로가기

알고리즘12

자바 - 프로그래머스 - 로또의 최고 순위와 최저 순위 (최적화 하기) 프로그래머스에서 로또의 최고 순위와 최저 순위를 풀었다. 문제는 어렵지 않았으나 최적화된 코드를 고민해 보는 시간을 가졌고 이번 블로그는 그 내용을 다뤘다. 문제와 예시는 다음과 같다. 해당 문제에 대한 접근 방법은 생각보다 용이했다. 🤓 코드 설계 1. lottos와 win_nums의 같은 값이 있다면 카운트한다. 2. 0의 개수를 카운트한다. 3. 같은 값의 개수는 최저 순위, 같은 값의 개수+0의 개수가 최고 순위가 된다. 🤨 구현한 코드 (복잡한 로그 주의⛔️) 그렇게...구현한 나의 코드는 else if의 성지가 되었다... package ImplementationAlgorithm; import java.io.IOException; import java.util.Arrays; public cla.. 2024. 4. 23.
자바 - 프로그래머스 - 소수 만들기 (feat. 약수) 소수 구하기 문제를 풀어보았다. 문제와 예시는 다음과 같다. 여기서 소수란 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다. 예를 들어, 5는 1×5 또는 5×1로 수를 곱한 결과를 적는 유일한 방법이 그 수 자신을 포함하기 때문에 5는 소수이다. (참고 : 위키백과) 1. 어떤 문제가 있었는지 결국 약수가 1과 자기 자신만을 가진, 약수가 총 2개인 수를 구하는 방법이었다. 2. 내가 시도해 본 것들 (힌트) 아래 힌트를 보기 전에 스스로 먼저 문제를 고민해보고 시도해보길 추천한다! 🤓 코드 설계 (1) 3개의 수를 더하는 방법 삼중 for 문을 돌려서 합계를 구한다. (2) 합계의 약수를 구하기 위해 나눌 수를 for문을 통해 만들어낸다. (3)약수를 구하는 방법은 나머지가 0인 수로 .. 2024. 4. 18.
자바 - 프로그래머스 - 두 개 뽑아서 더하기 (Stack) TIL 기준 1. 어떤 문제가 있었는지 2. 내가 시도해 본 것들 3. 어떻게 해결했는지 4. 뭘 새롭게 알았는지 =문시해알 1. 어떤 문제가 있었는지 프로그래머스 문제 중 두 개 뽑아서 더하기 라는 문제를 마주했다. 내용은 다음과 같다. 2. 내가 시도해 본 것들 🤓 코드 설계 (1) Sort로 정렬 (2) 정렬한 배열을 이중 for문으로 값 구하기 (3) 중복값 제거하기 (4) Sort로 배열 정렬 (2) 번에 있어서 처음에는 배열에 담을 그릇을 Queue로 사용하였으나 FIFO이기 때문에 순서대로 담긴 것은 오름차순이었다. 이때 for문을 돌려 위에서부터 아래로 배열을 담아 que.pop()을 하면 됐겠지만 더 효율적인 방법을 생각하다가 Stack을 구현하게 되었다. Stack은 FILO이니 단방향.. 2024. 4. 9.
자바 - 백준 - 1436번 영화감독 숌 나에게는 아직 어려운 실버 문제. 그렇지만 기록을 남기지 않으면 또 까먹을 나를 알기에, 또 누군가에게는 도움이 되었으면 하는 바람으로 글을 남긴다. 백준의 1436번 문제, 영화감독 숌의 힌트를 주자면 해당 문제는 브루트포스 알고리즘 이다. 온갖 경우의 수를 알아보는 브루트포스의 이번 문제는 다음과 같다. 이 문제를 보았을 때, 브루트포스니까 무식하게 접근해야지라는 아주 어리석은 태도를 가졌었는데 OH NO, 시간만 버렸다. 처음 나의 접근방법은 666이 카운팅 되는 패턴이 있을 것이라고 판단하여 액셀을... 사용했다. 오로지 패턴을 알기 위해..! 그렇게 무식한 나의 접근방법은 30분이라는 귀중한 시간을 허비하게 만들었고, 정신 차리고 다른 해법을 고민하기 시작했다. 고민은 했으나 답은 나오지 않았다.. 2024. 4. 5.
자바 - 프로그래머스 - 숫자 문자열과 영단어 숫자 문자열과 영단어 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제와 예시 🤨 구현한 코드 (복잡한 로그 주의⛔️) 처음 문제를 보았을 때, 먼저 떠오른 생각은 영문자를 숫자로 인식해서 바꿔주면 되겠지였다. 분명 자바의 내장 함수가 있었는데 기억이 안 나서 20분 정도 이것저것 끙끙 시도해 보다가 string의 replace()를 깨달았다. 나란 사람.. 기본 함수는 외우자 😂 그렇게 해서 완성된 코드.. class Solution { public int solution(String s) { s = s.replace("zero", "0"); s = .. 2024. 4. 4.
자바 - 프로그래머스 - 삼총사 프로그래머스 문제 '삼총사' 를 풀어보았다. 문제와 예시는 다음과 같다. 😞 처음 구현한 코드 (복잡한 로그 주의⛔️) import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { int[] number = {-2, 3, 0, 2, -5}; int answer = 0; // 셋 더 해서 0이 되어야 함 // 경우의 수 // 3 ≤ number의 길이 ≤ 13 for(int i=0; i< number.length-2; i++) { for (int j = 1; j < number.length; j++) { for (int z = 2; j < number.length; j++) .. 2024. 4. 2.
자바 - 프로그래머스 - 이상한 문자 만들기 프로그래머스 문제 '이상한 문자 만들기' 풀이 과정을 정리해 보았다. 😡 처음 구현한 코드 import java.io.IOException; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException { String s = "try hello world"; String answer = ""; char[] charS = s.toCharArray(); String[] strS = new String[charS.length]; // 짝수, 홀수 -> 대문자로 변환 for (int i=0; i 대문자로 변환 class Solution { public String solution(Strin.. 2024. 4. 2.
프로그래머스 - 가운데 글자 가져오기 - 자바 프로그래머스 알고리즘 문제를 풀다가 해결과정을 기록으로 남겨보았습니다. 가운데 글자 가져오기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제와 예시는 아래와 같습니다. 문제를 풀기 위해 설계 과정에서 문자열을 char 배열로 변환 후 저장해야겠다고 생각하였습니다. 그래서! 문자/문자열(String)을 배열로 변환하는 방법 2가지를 소개합니다. 1. 반복문 String s = "abcde"; char[] charS = new char [s.length()]; for (int i=0; i 2024. 3. 25.
프로그래머스 - 문자열의 앞의 n글자 - 자바 난이도 : Level 0 문제는 문자열 my_string에서 n만큼 앞에서부터 문자열을 가져오는 것이다. 문자열을 가져오는 함수로 subString 함수가 생각났다. 1. substring(start, end) my_string.substring(start, end)이라면 start번부터 end까지의 문자열을 가져온다. 예) my_string이 ProgrammerS123, n이 3인 경우, my_string.substring(0,n) 는 my_string.substring(0,3)으로 값은 Pro 2. 1. substring(start) my_string.substring(start)이라면 start부터 문자열을 가져온다. 예) my_string.substring(0)인 경우, 값은 ProgrammerS.. 2023. 12. 4.
백준 11047번 동전 0 - 그리디 - 자바 문제는 다음과 같다. 동전 0 문제는 그리디 문제에 속한다. 그리디에 대한 설명은 타 블로그의 포스트를 참조하였으니 궁긍하면 하단을 참고해주시면 될 것 같다! 누군가에게는 쉬울 수 있는 문제이지만 나는 꽤 오랜 시간이 걸렸던 문제이다. 내가 포인트로 배운 부분은 다음과 같다. 1. 입력 시 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어지는 값을 넣는 방법 2. 동전 개수의 최솟값을 구하기 위해서 i--로 로직을 구하는 방법 3. 첫 코드가 틀린 이유와 수정된 방향 1. 입력 시 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어지는 값을 넣는 방법 // 둘째 줄부터 N개의 줄에 동전의 값 Ai 입력 받기 int[] coins =new int[N]; for (int i = 0; .. 2023. 11. 12.
백준 1120번 문자열 - 자바 1120번은 브루트포스 문제이다. 문제는 다음과 같다. 입출력 결과는 다음과 같다. 결론부터 말하자면 구지 문자열 A 앞뒤로 알파벳을 추가할 필요가 없다고 생각이 들었다. 왜냐면! 어차피 문자열 A이 B에 동일하게 있는지 확인을 하면 된다고 생각하여 각각의 문자열을 비교/대조하면 된다고 생각하였다. 우선 각각의 값을 받아야하므로 BufferedRreader을 사용하였다. 입력되는 값들이 공백으로 띄어져 있으므로 각각의 값을 받기 위해 StringTokenizer을 사용하였다. 이후에 최소값과 비교하기 위해 최대값을 가진 변수를 초기화하였다. 이중 for문을 사용해서 문자열 A와 B의 인덱스를 확인하였다. 첫 번째 for문는 B를 순회하며 길이를 파악하는 용도! 두 번째 for문은 A를 순회하며 길이를 파.. 2023. 10. 30.
백준 1543번 문서 검색 - 자바 1543번은 브루트포스 문제이다. 문제는 다음과 같다. 예제 입력과 출력은 다음과 같다! 결국 중복되는 단어의 수를 겹치지 않고 세어야하는 것으로 이해했다. 이번 알고리즘은 검색할 단어를 문서에서 반복해서 확인해야했으므로 변수 2개를 각각 입력할 수 있도록 하고, 반복된 단어의 수를 알아야 하므로 count 변수를 추가하였다. 이후에는 indexOf() 함수를 사용하여 word라는 단어가 document에 있으면 몇 번째에 있는지 확인할 수 있는 함수를 만들었다. indexOf()함수에 대한 정보를 주석에 추가하였으니 도움이 되길 바란다! While문을 사용하여 반복해서 count의 개수를 추가하고 더 이상 단어가 반복되는 것이 없으면 break로 루프를 나오게 하였다. 완성 코드 import java... 2023. 10. 30.