Algorithm/Programmers

위 문제는 자바에서 제공하는 문자열 자르기(substring) 기능을 사용하여 문자열의 길이가 홀수, 짝수일 때 알맞게 사용자에게 문자열을 출력시켜주면 된다. 파라미터로 문자열을 넘기고, substring을 이용하여 출력해주면 되겠다! 라고 생각까지 했는데, 어떻게 잘라서 보여줄 지 고민을 많이 해봤던 거 같다. substring에는 startidx, endidx 두개 다 지정할 수도 있고, startidx만 지정할 수 있으니 앞으로 비슷한 문제나 실무에서 써야하는 일이 생긴다면 참고해서 사용하면 된다. 아래는 해답 package list; public class Programmers_MiddleString { public static String solution(String s) { // 모든 코드가 ..
진짜.. 요 며칠간 힘들게 푼 문제 ㅠㅠ 테스트 케이스가 4, 3, 2, 1 이랑 10 두개만 있었을 때는 아무리 돌려도 통과가 되는데 제출만 하면 아래와 같이 알 수 없는 런타임 에러와 테스트 실패가 연이어 나왔다 ㅠㅠ 최초 작성했던 소스는 이렇다. 런타임이 발생했던 원인은 전에 작성했던 for (int i = 0; i < s.length; i++) { if (s[i] != compNum) { answer[i] = s[i]; } } 이 코드가 문제였는데, answer[i] 는 위에서 s.length에 -1을 한 값으로 배열을 만들어놨는데, 작은 크기에 s[i]를 넣어주려고 하니, ArrayIndexOutOfBoundsException이 발생하거나, 혹여나 코드가 실행되도, 전부 실패처리가 되어버리는 것..
정수를 담고 있는 배열의 평균값을 리턴하는 solution 함수를 완성하라는 문제, 1 2 3 4 가 넘어왔을 때, 5 5 가 넘어왔을 때 등 여러가지 형태의 배열이 넘어와도 그 배열의 평균을 구해서 사용자에게 출력해주면 되는 문제 자바를 처음 배웠을 때 스캐너를 배우면서 3개~4개의 숫자를 직접 입력받아 평균을 구하는 문제가 있었는데, 이런식으로 배열을 받아 배열의 평균을 내는건 처음 해봤던 거 같다. 음.. 그래도 다른 레벨 1 문제랑 비교해보면 나름 쉬웠던 문제였다. package list; public class Programmers_Average { public static double solution(int[] s) { // 결과를 저장할 double 변수 double answer = 0; /..
전공자라면 누구나 한번쯤 겪어봤을 공포의 별찍기 자바버전 그래도 계단형 별찍기도 아니고 그냥 단순 사각형 별찍기라서 난이도는 상당히 낮은편이다 스캐너의 존재를 알고 있고, 이중반복문만 사용할 수 있다면 쉽게 풀 수 있는 문제! 더 이상의 설명은 생략..해도 되려나? 아래는 해답 package list; import java.util.Scanner; public class Programmers_RectangleStar { public static void solution(int a, int b) { Scanner sc = new Scanner(System.in); // 별을 찍기 위한 int 변수 //a = sc.nextInt(); //b = sc.nextInt(); // 반복문! for (int i = ..
문자열을 하나 받아서, 배열로 만들어주고 큰것부터 작은 순으로 정렬하여 사용자에게 출력해주면 되는 문제, 문자열을 배열로 만드는건 다른 문제들을 풀면서 어떻게 해야하는지 알고 있었지만, 문자열 정렬은 처음이었다. 오라클이었으면 ORDER BY 사용해서 그냥.. 내 마음대로 오름차순, 내림차순 정렬하면 됐겠지만 자바에서는 해본 적이 없어 검색도 해보고 다른 사람들의 풀이도 보면서 해답을 찾아나갔다. Arrays와 Collections을 사용하여, 배열을 정렬시켰는데 정말 고맙게도 Collections에 reverse가 있어 낼름가져다가 사용하였다. 위의 두 메소드를 이용하면 이번 문제는 쉽게 풀 수 있다. 사실상 공부만 조금 더 했다면 풀 수 있었던 문제! 누구나 처음엔 모를 수 있으니까 이번 문제풀이를 ..
같은 숫자는 싫어! 문제에도 나와있듯 배열안에 같은 숫자를 모두 지우는게 아니라, '연속적으로 나타나는' 숫자만 제거해주면 되는 문제이다. 처음에는 반복문을 하나만 쓸까 두개를 만들어서 쓸까 생각을 많이 해봤는데, 엄청 단순하게 배열로만 풀어야한다고 생각을해서 이중포문을 만들어서 문제를 풀려고 했으나, 진짜 도저히 풀 수가 없었다.. 아는게 그만큼인건지 애초에 푸는 방식이 잘못됐던건지 지금은 알 수 없지만 ㅠㅠ.. 결국 ArrayList를 사용해서 문제를 풀기로 했다. 실무에서 ArrayList를 본 적도 있고 내가 사용해본적도 있었는데, 알고리즘 문제를 풀면서 다시 쓰니까 느낌이 새로웠다. 해답을 보기전에 문제를 정리해보자면 이렇다. 숫자로만 이루어져있는 배열이 하나 있는데, 이 배열에서 연속된 숫자는..
위 문제는 자바의 Integer를 알고 있다면 쉽게 풀 수 있는 문제다. Integer의 parseInt를 사용해서, 문자열 s를 int로 형변환하여 사용자에게 출력만 해주면 되는 문제. 더 이상 설명이 필요없기 때문에 설명은 간단하게! 금요일이니까~ package list; public class Programmers_StringParseInt { public static int solution(String s) { // 결과를 저장할 int 변수 int answer = 0; // 문자열로 넘어온 s를 함수를 사용하여 answer에 담아준다 answer = Integer.parseInt(s); // answer에 담긴 값 리턴 return answer; } public static void main(S..
조건문을 활용하여 짝수일 때 "Even" 홀수일 때 "Odd"를 출력하면 되는 간단한 문제 package list; public class Programmers_EvenAndOdd { public static void solution(int s) { // 결과를 리턴할 String 변수 String answer = ""; // s를 2로 나눴을 때 나머지가 0일 경우 if(s % 2 == 0) { // 짝수 answer = "Even"; } else if (s == 0) { // 나눈값과 상관없이 0일 경우 짝수 answer = "Even"; } else { // 나머지가 0이 아닐 경우 홀수 answer = "Odd"; } // 결과 리턴 System.out.print(answer); } public ..
프로그래머스 코딩테스트 연습 레벨1 문제중에 제일 쉬운 문제가 아닐까.. 싶은 문제 String형 배열 seoul에서 "Kim"의 위치를 찾으면 되는 간단한 문제! 보통 나같은 경우에는 문제를 IDE에서 먼저 풀어보고 결과가 의도한대로 나오면 웹 IDE로 옴기는데, 이번 문제 같은 경우에는 분명 맞게 푼 거 같은데 계속 오답이 나오길래 뭐지..? 했다 천천히 살펴보니 문제에서 이미 seoul이라는 배열을 제공해주고 있었다.. 가끔씩 급하게 하다가 실수를 하곤 하는데, 그 습관이 여기서도 나왔던 거 같다. 앞으로 천천히 문제부터 읽고, 정확히 어떤것을 해야하는지 정해놓고 코딩하는 습관을 길러야겠다. 실무에서도 마찬가지지만 어떤 과제가 주어지면 우선 급한대로 풀고보자라는 생각이 들어 고쳐야겠다고 생각은 했었..
음.. 뭔가 아리까리 했던 문제 레벨 1이지만 나는 레벨1도 못 되는걸 알기에...ㅠㅠ 여기저기 검색도 많이 해보고 풀게 된.. 문제 어떻게 풀어야 하는지는 알겠는데 어디부터 건드려야 할지 몰랐는데 어찌어찌하다 보니 거의 다 와서 마지막에 반복문 돌리는거만 더 찾아봤던 거 같다..! 앞으로는 풀이마다 최대한 주석을 달아서 틀린 부분은 바로 잡고 나~~중에 봐도 깜빡하지 않도록 잘 적어놔야겠다. 아래는 해답! package list; public class Programmers_OkasiString { public static String solution(String s) { // s 문자열을 받아, split 함수로 알맞게 크뜨크뜨 String[] arr = s.split(""); // 인덱스 변수 선언..
숫자 텍스트가 들어간 배열과 문자 배열을 생성하고, 배열의 크기만큼 반복문을 실행하며 일치하는 텍스트가 있다면 문자를 숫자로 바꿔 반복문이 종료된 후 문자열을 반환한다. 정답! package list; public class ProgrammersKakao2021_IntString { public static int solution(String s) { String[] numInt = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; String[] numStr = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; for(int i = 0; i < 10; i++) { ..
해답 SELECT SUB.ANIMAL_ID, SUB.NAME FROM ( SELECT A.ANIMAL_ID, A.NAME FROM ANIMAL_INS A, ANIMAL_OUTS B WHERE A.ANIMAL_ID = B.ANIMAL_ID AND B.DATETIME IS NOT NULL ORDER BY B.DATETIME - A.DATETIME DESC) SUB WHERE ROWNUM
해답 SELECT ANIMAL_ID, NAME, CASE WHEN SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O' WHEN SEX_UPON_INTAKE LIKE '%Neutered%' THEN 'O' ELSE 'X' END AS 중성화 FROM ANIMAL_INS ORDER BY ANIMAL_ID; 오라클의 CASE 문을 사용하면 풀 수 있는 문제. 프로그래머스의 문제들 Level 이 올라갈 수록 생각 못하고 지나가는것들이 너무 많아서ㅠㅠ 검색을 열심히 하면서 풀고 있다 ㅠ.ㅠ 앞으로는 열심히 푸는것도 중요하지만 잊어버린 것들을 다시 잊어버리지 않게 열심히 정리하는 습관을 들여야겠다!
-- 코드를 입력하세요 SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE UPPER(NAME) LIKE '%EL%' AND ANIMAL_TYPE = 'Dog' ORDER BY NAME; 생각을 한번 하게 되는 문제였는데, 문자열 검색을 할 때 대소문자가 확실하지 않을 경우 UPPER, LOWER 를 사용하여 검색하면 원하는 결과를 찾기가 훨씬 수월하다!
정말 쉬운데 어려운 문제다. 해법이 여러개가 있기 때문이다 -- 너무너무 하드한 방식 SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME LIKE 'Ella' OR NAME LIKE 'Lucy' OR NAME LIKE 'Pickle' OR NAME LIKE 'Rogan' OR NAME LIKE 'Sabrina' OR NAME LIKE 'Mitty' ORDER BY ANIMAL_ID; -- 너무너무 스마트한 방식 SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS WHERE NAME IN('Ella', 'Lucy', 'Pickle', 'Rogan', 'Sabrina', 'Mitty') ORD..
헌일