프로그래머스

    [프로그래머스,Level 1] 평균 구하기(JAVA 구현)

    - 첫 풀이 및 정답풀이 class Solution { public double solution(int[] arr) { double answer = 0; int sum = 0; // 1. 모든 원소 합. for(int i = 0; i

    [프로그래머스,Level 1] 핸드폰 번호 가리기(JAVA 구현)

    - 첫 풀이 및 정답풀이 주어진 전화번호 문자열의 가장 뒤의 4자리만 원래의 숫자를 표시해야 한다. 입력 예제 1번을 살펴보면, 문자열 phone_number를 인덱스 단위로 0 ~ 10까지 11의 길이를 가지고 있다. 이 중 맨 뒤의 4자리를 살리기 위해 11-4 = 7번 인덱스부터 문자열 끝까지를 그대로 살리고, 나머지 인덱스는 *표를 입력하면 된다. class Solution { public String solution(String phone_number) { String answer = ""; // 문자열 길이만큼 반복 for(int i =0;i

    [프로그래머스,Level 1] 하샤드 수(JAVA 구현)

    - 첫 풀이 및 정답풀이 하샤 드 수를 판별하기 위해서는 각 자릿수를 추출하는 것이 핵심이라고 생각한다. 각 자릿수를 추출한 뒤 모두 더해 x와 나누어 떨어지는지 여부를 확인하면 된다. class Solution { public boolean solution(int x) { boolean answer = true; int sum = 0; // 자릿수의 합 int n = x; // 나누기 위해 x 값을 저장해둔다. while(x != 0){ // x가 0이 될 때 까지 각 자릿수를 추출해 더해준다. sum+= x % 10; x /= 10; } // 나누어 떨어지면 하샤드 수 if(n % sum == 0) return answer; // 아니면 false 반환. return false; } }

    [프로그래머스,Level 1] 행렬의 덧셈(JAVA 구현)

    - 첫 풀이 및 정답풀이 동일한 크기의 2차원 배열 arr1, arr2의 각 원소들을 더해 answer 2차원 배열에 저장 후 반환하면 된다. class Solution { public int[][] solution(int[][] arr1, int[][] arr2) { int[][] answer = new int [arr1.length][arr1[0].length]; for(int i =0;i

    [프로그래머스,Level 1] x만큼 간격이 있는 n개의 숫자(JAVA 구현)

    - 첫 풀이 및 정답풀이 이 문제의 핵심은 n크기의 배열에 x ~ x * n의 정수들을 저장해 반환하면 된다는 것이다. 우선 첫 번째 원소는 무조건 x이기 때문에 x로 초기화 후, x만큼 지속적으로 증가시켜주면 된다. class Solution { public long[] solution(int x, int n) { long[] answer = new long[n]; // 1. 배열의 시작은 x answer[0] = x; // 2. 다음 원소부터는 이전 원소 + x for(int i =1;i

    [프로그래머스,Level 1] 직사각형 별찍기(JAVA 구현)

    - 첫 풀이 및 정답풀이 백준에서 많이 풀어본 별 찍기 문제로 간단하게 풀 수 있었다. import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); // 가로 int b = sc.nextInt(); // 세로 // 행의 수 반복 for(int i=0;i

    [프로그래머스,Level 1] 2016년(JAVA 구현)

    - 첫 풀이 및 정답풀이 처음 문제의 접근을 달력을 그려보며 파악하긴 했지만, 매 달이 며칠까지 있는지를 생각해내지 못해 고민을 좀 했다. 매 달 며칠인지는 우리가 어려서부터 손을 사용해 많이 세 보았듯이, 정해진 일수가 존재한다. 이후 문제에서 1월 1일이 금요일이라고 주어졌기 때문에 7일까지 토, 일, 월, 화, 수 순으로 반복되며, 이를 활용해 예제를 본다면 5월의 이전인 1~4월까지의 총 일수와 5월의 24일을 더해주어 7로 나눈 나머지에 따라 요일을 구할 수 있었다. 단, 필자의 풀이 방식에서는 7일의 배수인 경우 나머지가 0이 나오는데, 이는 모두 목요일에 해당된다는 점만 주의하면 된다. class Solution { public String solution(int a, int b) { // ..

    [프로그래머스,Level 1] 같은 숫자는 싫어(JAVA 구현)

    - 첫 풀이 및 정답풀이 이 문제의 핵심은 주어진 정수 배열에서 연속되는 숫자를 제외하고 1개씩만 순서를 유지한 채 출력해야 한다는 것이다. 즉, 주어진 배열을 탐색하면서 순서대로 새로운 배열에 삽입해 반환하면 된다. 연속되는 정수를 구분하기 위해 boolean 배열을 이용해 방문 여부를 체크함과 동시에, 예제 1번과 같이 같은 숫자가 다시 등장할 수 있는 경우를 위해 이전에 탐색한 정수와 비교하는 코드가 필요했다. import java.util.*; public class Solution { // 1. ArrayList 반환형태로 변경. public ArrayList solution(int []arr) { // 2. ArrayList 객체 생성. ArrayList answer = new ArrayLis..

    [프로그래머스,Level 1] 가운데 글자 가져오기(JAVA 구현)

    - 첫 풀이 및 정답풀이 이 문제의 핵심은 홀/짝의 문자열 길이에 따라 출력 형식을 바꿔주면 된다. 홀수일 경우, 문자열의 중앙에 위치한 문자를, 짝수일 경우 문자열 중앙의 두 문자를 반환하면 된다. 입출력 예 1번의 홀수 5 길이의 문자열은 문자로 분리했을 때 인덱스상 중앙에 오는 문자는 2번 인덱스의 문자이고 2번의 짝수 4 길이의 문자열은 인덱스상 1,2번 인덱스의 문자가 해당된다. 즉, 홀수는 문자열 길이/2의 문자를 취하고 짝수는 문자열 길이/2와 (문자열 길이/2) - 1의 문자를 취하면 된다. class Solution { public String solution(String s) { String answer = ""; // 1. 짝수인 경우 if(s.length() % 2 == 0){ //..

    [프로그래머스,Level 1] 나누어 떨어지는 숫자 배열(JAVA 구현)

    - 첫 풀이 및 정답풀이 이 문제는 주어진 배열을 탐색하면서 divisor로 나눈 나머지가 0인 원소들을 배열에 담아 반환하면 되는 문제이다. 하지만 문제상으로 solution 메서드의 반환 값인 int [] 타입인 배열은 크기가 고정되어 있기 때문에 입출력 예와 같이 동적인 결과를 반환할 수 없다. 따라서 필자는 요소의 추가가 용이한 ArrayList 클래스를 사용했다. import java.util.ArrayList; import java.util.Collections; class Solution { // 1. 반환타입을 ArrayList로 변경. public ArrayList solution(int[] arr, int divisor) { // 2. ArrayList 객체 생성. ArrayList a..