코테
[프로그래머스,Level 1] 두 정수 사이의 합(JAVA 구현)
- 첫 풀이 및 정답풀이 이 문제에서 핵심은 a와 b의 대소 관계가 정해져 있지 않은 것이다. 그렇기에 두 수 사이의 정수 합을 구하기 위한 반복문을 두 가지로 고려해서 나누어야 하는데, 필자는 삼항 연산자를 이용해 하나의 반복문을 사용해 풀어보았다. class Solution { public long solution(int a, int b) { long answer = 0; // 1. a == b 이면, a 또는 b를 반환한다. if(a == b) return a; // 2. 3항 연산자를 통해 반복문의 조건을 구분한다. for(int i = a>b?b:a;ib?a:b);i++) { answer+=i; } // 3. 정수합을 반환한다. return answer; } }
[프로그래머스,Level 1] 문자열 내 p와 y의 개수(JAVA 구현)
- 첫 풀이 및 정답풀이 문제의 핵심은 하나의 문자열에 존재하는 p와 y의 개수에 따라 리턴 값을 다르게 해 주면 된다. 문제에서는 길게 설명하고 있지만, p와 y의 개수가 같으면 True를 리턴하고(p와 y가 모두 0개일 때 역시 같은 경우.) 개수가 다르면 False를 리턴하면 된다. 또한 문제에서 대소문자의 구분이 없기 때문에 문자열에 존재하는 알파벳을 대문자 또는 소문자로 모두 바꾸고 풀이를 진행하였다. class Solution { boolean solution(String s) { boolean answer = true; // 1. 문자열 s를 모두 소문자로 치환한다. String str = s.toLowerCase(); // 2. p와 y의 개수를 저장할 변수. int cnt_p = 0, c..
[프로그래머스,Level 1] 문자열 내 마음대로 정렬하기(JAVA 구현)
- 첫 풀이 및 정답풀이 이 문제는 정렬을 위한 특정 기준을 통해 배열을 정렬하는 것이 핵심인 문제라고 생각한다. 필자는 이전부터 이러한 유형의 문제는Arrays.sort() 메서드의 인자로 Comparator인터페이스의 compare() 메서드를 재정의하는 방식을 이용하는 방법을 연습했기 때문에 쉽게 풀 수 있었다. import java.util.Arrays; import java.util.Comparator; class Solution { public String[] solution(String[] strings, int n) { // 1. Arrays.sort() 메소드의 인자로 Comparator인터페이스 재정의 Arrays.sort(strings, new Comparator() { // 2. c..
[프로그래머스,Level 1] 문자열 내림차순으로 배치하기(JAVA 구현)
- 첫 풀이 및 정답 풀이 이 문제는 대소문자 알파벳을 일반 정렬을 하게 될 경우 대문자가 먼저 정렬되고 소문자가 정렬되기 때문에 주어진 문자열 s를 역순으로 정렬하는 것이 핵심이다. 이를 위해 주어진 문자열을 배열로 변환하는 과정을 거쳐야 하는데, 처음에는 String str [] = new String []{s};로 str [0]에 s문자열을 요소로 생성해 버리는 실수를 했다. 문자열 배열의 인덱스 별로 문자를 저장해야 하기 때문에 String str [] = s.split("");을 이용해 저장할 수 있었다. 또한 이 방법 외에도 문자열 s를 char 배열에 저장하기 위해 char[] ch = s.toCharArray(); 를 이용하는 방법도 존재한다는 것을 알 수 있었다. import java.u..
[프로그래머스,Level 1] 서울에서 김서방 찾기(JAVA 구현)
- 첫 풀이 및 정답 풀이 처음에 문제를 읽고 for문을 통해 선형 탐색으로 찾으면 쉽게 풀 수 있다고 생각했기 때문에, 다른 방식의 풀이법을 생각해 보았다. 그 과정에서 이전에 얼핏 알았던 indexOf()메소드에 대해서 찾아보게 되었고 이번 기회에 정확한 사용법을 알 수 있었다. ArrayList의 indexOf() 메서드를 사용하기 위해 Arrays클래스의 asList() 메서드를 이용한다. import java.util.Arrays; class Solution { public String solution(String[] seoul) { String answer = ""; // Arrays.asList(seoul)로 ArrayList로 변환한 뒤, indexOf()메소드를 통해 Kim의 인덱스를 찾..
[프로그래머스,Level 1] 수박수박수박수박수박수?(JAVA 구현)
- 첫 풀이 및 정답 풀이 이 문제는 쉽게 풀 수 있었다. 입출력 예를 보면, 각 자릿수 별 홀수 자리에는 "수"가 짝수 자리에는 "박"이 들어간다. 또한 n의 길이가 10,000이기 때문에 for문을 통해 충분히 해결할 수 있을 것이라 생각했다. class Solution { public String solution(int n) { String answer = ""; // 1. 홀수 자리 "수" String odd_word = "수"; // 2. 짝수 자리 "박" String even_word = "박"; // 3. 1~n까지 홀짝 자리에 맞추어 글씨를 이어 붙인다. for(int i=1;i
[프로그래머스,Level 1] 문자열 다루기 기본(JAVA 구현)
- 첫 풀이 처음 풀 때, 문제를 제대로 읽지 않아 '문자열 s의 길이가 4 혹은 6이고' 이 부분을 간과한 채 숫자로만 구성돼있는지 여부만을 확인하여 몇몇의 테스트 케이스가 실패하였다. 또한, 숫자 중 0을 왜인지 모르게 고려하지 않아 몇 번 더 실패하였다. class Solution { public boolean solution(String s) { boolean answer = true; // 문자열 길이를 고려하지 못했다. for(int i=0;i=1 && s.charAt(i)-'0'
[프로그래머스,Level 1] 문자열을 정수로 바꾸기(JAVA 구현)
- 첫 풀이 처음에는 문자열로 받은 숫자를 charAt() 메서드를 이용해 하나하나 파싱 하여 정수로 변환하려는 과정을 시도했다. (바보 같다.) class Solution { public int solution(String s) { int answer = 0; int num = 1000; for(int i=0;i
[프로그래머스,Level 1] 소수 찾기 (JAVA 구현)
-첫 풀이 class Solution { public int solution(int n) { int answer = 0; for(int i = 2; i
[백준,BOJ 10773] 제로(JAVA 구현)
- 풀이 문제의 분류 자체가 스택이기 때문에 스택을 사용해야 한다는 생각이 들기도 하지만, 문제를 잘 읽어보면 정수가 계속 입력될 때 '0'이 입력되면 0이 입력되기 이전의 정수 하나를 지우기 때문에 최근에 입력된 데이터가 가장 먼저 출력되는 LIFO 구조의 스택을 사용해야 한다는 사실을 알 수 있다. 필자는 처음에 모든 정수를 입력받아 스택에 PUSH해준 뒤, POP 해가면서 0이 나오면 한 번 더 POP을 하는 식으로 접근하였지만, 예제 입력 2와 같이 0이 연속으로 입력되는 경우, 최근의 정수를 제대로 지우지 못하기 때문에 입력받을 때 0이면 바로 지워주게끔 풀이하였다. import java.io.BufferedReader; import java.io.BufferedWriter; import jav..