[프로그래머스] 주식가격
·
PS
이 문제는 프로그래머스 LV2에 해당하는 코딩테스트 문제다.'스택/큐'에 대한 개념이 아직 잘 잡혀있지 않아서 나는 문제를 처음 보고 이중for문을 사용하는 방식으로 접근했다.아래 코드는 이중for문을 활용한 방식이다.class Solution { public int[] solution(int[] prices) { int[] arr = new int[prices.length]; for (int i=0; i prices[j]) { break; } } arr[i] = count; } return arr; ..
[프로그래머스] 숫자 문자열과 영단어
·
PS
이런 유형의 문제를 처음 보면 머릿 속에 미리 one, two, three, four... 숫자에 해당하는 영단어를 미리 숫자와 매칭을 시켜놓고 들어가야 되나? for문을 이용해서 반복문을 돌릴 때 반복문 안에서 어떻게 단위(숫자 하나) 별로 자를 수 있지? 어떻게 영어로 된 부분을 숫자로 교체하지? 등등 다양한 고민이 생길 수 있다.나 역시 그랬다. 이 문제는 별거 없다. 그냥 java에서 교체하는 함수 replace만 알고있으면 된다.String 배열에 영단어들을 저장하고 반복문을 10번 돌리면 되는 문제다.반복문이 한 번 돌 때마다 일치하는 것이 있다면 숫자로 대체되게끔 하는 것을 말한다. 내가 범했던 실수가 하나있다.바로 for문 안에 if문을 사용했던 것이다."만약 words에 있다면 교체한다"..
[프로그래머스] 푸드 파이트 대회
·
PS
이 문제는 딱히 중요해 보이진 않았지만 reverse()라는 존재를 잊지 않기 위해 블로그에 남긴다. 사실 나는 reverse()를 사용하지 않았을 뿐더러 불필요한 arr배열까지 만들어서 반복해야 하는 수를 담기 까지 했는데가장 정제된 코드로 reverse()를 사용했을 때와 안 했을 때를 비교해보자. class Solution { public String solution(int[] food) { StringBuilder sb = new StringBuilder(); // 왼쪽 for (int i = 1; i = 1; i--) { for (int j = 0; j 이건 사용하지 않았을 때다. arr을 제거한 대신 범위에 food[i] / 2를 ..
[프로그래머스] 시저 암호
·
PS
이 문제는 프로그래머스 LV1 단계에 해당하는 시저 암호 문제다.복잡한 알고리즘을 요구하는 문제는 아니지만, 문자의 코드값(ASCII/Unicode)과 문자 연산을 이해하는 데 도움이 되는 문제라고 생각해 정리해 보았다. Java의 char는 Unicode를 사용하지만, 영문 알파벳(A~Z, a~z)의 코드값은 ASCII와 동일하다. 따라서 시저 암호와 같은 문제에서는 ASCII 코드의 개념으로 이해해도 무방하다. 문자도 내부적으로는 숫자로 저장되기 때문에 숫자처럼 덧셈과 뺄셈 연산을 할 수 있다.따라서 이 문제는 영문 알파벳이 연속된 코드값을 가진다는 점과, 문자를 숫자처럼 더하고 뺄 수 있다는 점을 이용해 해결할 수 있다. 문자코드'A'를 뺀 결과A650B661C672.........X8823Y892..
[프로그래머스] 이상한 문자 만들기
·
PS
이 문제는 대충 읽고 풀면 나처럼 틀릴 수 있다.나는 처음 풀 때 문제를 대충 읽고 홀수 인덱스는 소문자 짝수 인덱스는 대문자로 하면 되는구나 하고 로직을 만들었다. class Solution { public String solution(String s) { char[] arr = s.toCharArray(); for (int i = 0; i 위에 코드는 내가 처음 잘못 푼 코드다.char 배열을 만들고 반복문을 통해 홀수 인덱스는 소문자로 짝수 인덱스는 대문자로 변경했고 마지막 char 배열을 문제의 요구사항에 맞게 String 형태로 return 했다. 이렇게 문제를 제출하니 꽤 많은 테스트 케이스를 실패했다. 그래서 내가 문제를 읽으면서 놓친 조건이 있나 다시 한 번..
[프로그래머스] 최대공약수와 최소공배수
·
PS
이 문제는 아주 쉬운 기초문제지만 최소공배수를 표현하는 법을 잊지 않기 위해 블로그에 남기기로 했다. 초기 내 코드class Solution { public int[] solution(int n, int m) { int[] arr = new int[2]; if (n % m == 0) { arr[0] = m; arr[1] = n; } else if (m % n == 0) { arr[0] = n; arr[1] = m; } else { for (int i=1; i 최소 공배수를 구하는 코드를 보면 두 수를 최대 공약수로 나눈 값을 저장하는 Nu..
[프로그래머스] 두 개 뽑아서 더하기
·
PS
나는 이 문제를 보고 예전 확률과 통계 같은 곳에서 풀던 문제들이 생각났다.인덱스의 위치를 [0], [1] 이런식으로 표현해보겠다. 크기가 5인 배열이라고 가정해보면[0] + [1], [0] + [2], [0] + [3], [0] + [4][1] + [2], [1] + [3], [1] + [4][2] + [3], [2] + [4][3] + [4] 이런식의 흐름을 떠올렸다. 이 생각을 기반으로 작성한 내 최종 코드다.크기가 정해진 배열이 아니므로 ArrayList를 사용했고 앞서 설명한 방식으로 더하기 위해 이중 for문을 사용했다.이후 문제 요구사항에 맞게 정렬을 했고 return 하기 위한 배열을 새로 만들어 list에 있는 값들을 넣음으로써 로직을 완성했다. import java.util.*;clas..
[프로그래머스] 원하는 문자열 찾기
·
PS
다음 문제는 프로그래머스 코딩테스트 LV0에 해당하는 문제다.그럼에도 블로그에 정리하는 이유는 매우 간단한 문제지만 풀지 못 했기 때문이다.LV0 문제이기 때문에 문제를 대충읽고 코드를 적어서 제출했는데 테스트에 통과하지 못했다.문제를 다시 읽어보니 조건에 알파벳 대소문자를 구분하지 않는다고 되어있었다. 아스키 코드를 사용해야 하나..? String을 char로 하나씩 뜯어서 비교하는 로직을 짜야하나..? 이상한 방법만 머리에 떠올랐다. contains가 아닌 대소문자 상관없이 비교할 수 있는 java 함수가 있나 하고 gpt한테 물어봤더니 전부 소문자나 대문자로 바꿔서 비교하라 했다. "..!!!" class Solution { public int solution(String myString, S..