본문 바로가기

알고리즘19

자바 - 프로그래머스 - 숫자 짝꿍 (feat. 시간초과) 숫자 짝꿍 문제는 다음과 같다.문제와 예시 함정이 많아 시간이 생각보다 많이 걸렸고 시간초과 등의 에러가 발생하여타 풀이를 참조하여 풀었다. 🤓 코드 설계1. x,y를 int로 치환하기2. 이중 for문을 돌려서 동일한 값 PriorityQueue에 넣어 반환하기 🤨 구현한 코드 (복잡한 로그 주의⛔️)더보기package ImplementationAlgorithm;//import java.io.IOException;import java.lang.management.LockInfo;import java.util.LinkedList;import java.util.PriorityQueue;import java.util.Queue;import java.util.stream.Stream;public class.. 2024. 5. 4.
자바 - 프로그래머스 - 로또의 최고 순위와 최저 순위 (최적화 하기) 프로그래머스에서 로또의 최고 순위와 최저 순위를 풀었다. 문제는 어렵지 않았으나 최적화된 코드를 고민해 보는 시간을 가졌고 이번 블로그는 그 내용을 다뤘다. 문제와 예시는 다음과 같다. 해당 문제에 대한 접근 방법은 생각보다 용이했다. 🤓 코드 설계 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.
배열 복사 - Arrays.copyOfRange() TIL 기준 1. 어떤 문제가 있었는지 2. 내가 시도해 본 것들 3. 어떻게 해결했는지 4. 뭘 새롭게 알았는지 =문시해알 :) 1. 어떤 문제가 있었는지 프로그래머스에서 K번째수 를 풀다가 배열을 복사하는 방법을 찾아보게 되었다. 먼저 프로그래머스 문제와 예시는 다음과 같다. 2. 내가 시도해 본 것들 🤓 코드 설계 문제를 풀기 위해 나름의 설계를 했다. [이중 for문을 사용해서 배열 선언 및 저장하기] (1) i~j번째 숫자 배열을 찾아서 새로운 배열에 저장하기 (2) 배열 정렬 (3) k 번째 숫자 반환 🤨 구현한 코드 (복잡한 로그 주의⛔️) 그렇게 해서 도출된 코드는 다음과 같다. import java.util.Arrays; class Solution { public int[] solutio.. 2024. 4. 8.
자바 - 프로그래머스 - 숫자 문자열과 영단어 숫자 문자열과 영단어 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. 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 문제와 예시 먼저 최대공약수는 for문을 돌리면서 주어진 두 숫자의 나머지를 0으로 만드는 최대 숫자를 구하는 방식을 사용하였다. for (int i=1; i 2024. 3. 28.
자바) 문자열이 숫자인지 확인하는 방법 (참고 프로그래머스 - 문자열 다루기) 프로그래머스 알고리즘 문제 - 문자열 다루기 기본 - 를 풀다가 문자열이 숫자로 이루어졌는지 확인하는 방법을 정리해 보았다. 문제와 예시 힌트이자 결론부터 말하면 3가지 방법이 있다. 그전에 잠시! (아직 문제 풀이를 시도하지 않았다면 적어도 30분 이상은 고민해 보시길 추천한다) (혹시 문제에 대한 힌트가 필요하다면 여기를 눌러보자.) 자 - 3가지 방법은 다음과 같다. 1. chartAt()을 활용하여 숫자 체크하기 2. isDigit() 함수 활용하기 3. NumberFormatException 활용하기 1. chartAt()을 활용하여 숫자 체크하기 제일 직관적인 방법이다. for문을 돌려서 문자 하나마다 char형으로 제시한 숫자와 동일한지 확인하기 String s = "983z"; boolea.. 2024. 3. 26.
자바) 등차수열 가볍게 알아보자! 프로그래머스 알고리즘 문제, 부족한 금액 계산하기를 풀며 등차수열의 벽을 느꼈다. 중학생 때 공부했던 공식은 저 멀리 사라지고 이름만 알고 있는 상태이기에 문제를 바탕으로 간단한 정리를 해본다. 문제와 예시 여기서 잠깐! 아래에는 바로 답변이 보이기에 문제를 아직 풀지 않은 분들은 스스로 생각을 더해보고 참고하시길 추천한다 :) 등차수열로 푼 답변 class Solution { public long solution(int price, int money, int count) { long answer = -1; answer = (long)price*count*(count+1)/2 - money; return answer 2024. 3. 26.
자바) 배열을 문자열로 변환하는 방법 (char 배열 포함) Java에서 배열을 문자로 변환하는 방법에는 3가지가 있다. 1. 배열을 문자열로 변환 - Arrays.toString() 2. char 배열을 문자열로 변환 - String.valueOf() - new String() 1번 코드 예시 String s = "abcde"; char[] charS = s.toCharArray(); System.out.println("charS = " + Arrays.toString(charS)); // charS = [a, b, c, d, e] 간혹 배열 안에 값이 잘 들어갔는지 확인하기 위해 System.out.println(charS) - 배열명만 입력하는 경우가 있는데, 이 경우, 배열의 위치를 알려주므로 주의하자. 요런식으로 나타난다 🥲 2번 코드 예시 - Strin.. 2024. 3. 25.
Java에서 대소문자 크기 비교하기 (참고: 프로그래머스 - 자바 - 문자열 내림차순으로 배치하기) 프로그래머스에서 문제를 풀다가 자바에서는 대소문자 비교도를 알고 있으면 좋을 것 같아 기록을 남긴다. 참고한 문제 : 문자열 내림차순으로 배치하기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제와 예시는 다음과 같다. 결론부터 말하면 비교도는 대문자 2024. 3. 25.
자바) 문자를 char 타입의 배열로 변환하는 2가지 방법 문자(String)를 배열(문자열)로 변환하는 방법 2가지를 소개합니다. 1. 반복문 String s = "abcde"; char[] charS = new char [s.length()]; for (int i=0; i 2024. 3. 25.
프로그래머스 - 가운데 글자 가져오기 - 자바 프로그래머스 알고리즘 문제를 풀다가 해결과정을 기록으로 남겨보았습니다. 가운데 글자 가져오기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. 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.