https://school.programmers.co.kr/learn/courses/30/lessons/67257 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 각각의 연산자에 우선순위를 부여하여 각각의 우선순위대로 계산했을 때 절댓값이 가장 큰 경우를 찾는 것이다. 핵심 연산자가 +, -, * 3가지이기 때문에 연산자의 우선순위의 경우의 수는 6가지이다. 따라서 다소 빡구현을 통해 풀 수 도 있지만, 조합을 이용하면 더 간결하게 작성할 수 있다. 정답 코드 import java.util.ArrayList; import java.util.Lis..
https://school.programmers.co.kr/learn/courses/30/lessons/67258 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 투 포인터를 사용하는 문제이다. 핵심 모든 종류의 보석을 갖는 경우를 알아야 하고 만약 모든 보석을 가지고 있다면 1칸씩 당기면서 보석을 버리고, 그때도 모든 종류의 보석을 가지고 있는지 체크하며 최소의 길이를 찾아야 한다. 정답 코드 import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.ut..
https://www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net bfs를 사용하는 구현문제이다. 핵심 이 문제는 어떤 식으로 접근할지 충분히 생각하고 시작하면 쉽게 풀 수 있다. 우선 나는 각각 자리마다 bfs를 하여 이동한 곳을 모두 체크하고, 이후에 체크를 하지 않은 곳을 탐색하는 방법을 사용하였다. 또한 한 번에 bfs로 이동한 곳은 좌표를 담아서 changeMap을 통해 자리의 값을 바꿔주었다. 정답 코드 import java.util.A..
현재 캡스톤 프로젝트를 진행중인데, 코드 컨벤션에 대한 코드 리뷰를 많이 받았다. 따라서 코드 컨벤션을 정리하고자 글을 작성하였다. 우선 코드 컨벤션이란 실제 지키지 않아도 오류가 발생하는 것은 아니지만, 내가 작성한 코드를 다른 사람들도 쉽게 이해할 수 있는 협업에 있어서 중요한 코드 작성법 규칙이다. 식별자에는 영문/숫자/언더스코어만 허용 변수명, 클래스명, 메서드명 등에는 영어와 숫자만을 사용한다. 상수에는 단어 사이의 구분을 위하여 언더스코어(_)를 사용한다. 정규표현식 `[^A-Za-z0-9_]`에 부합해야 한다. 한국어 발음대로의 표기 금지 식별자의 이름을 한글 발음을 영어로 옮겨서 표기하지 않는다. 한국어 고유명사는 예외이다. 패키지 이름은 소문자로 구성 package com.example...
https://www.acmicpc.net/problem/2580 2580번: 스도쿠 스도쿠는 18세기 스위스 수학자가 만든 '라틴 사각형'이랑 퍼즐에서 유래한 것으로 현재 많은 인기를 누리고 있다. 이 게임은 아래 그림과 같이 가로, 세로 각각 9개씩 총 81개의 작은 칸으로 이루 www.acmicpc.net 백트래킹 문제이다. 핵심 입력값 0 이 있는 곳에 1~9까지 가능한 숫자를 대입하면서 스도쿠를 완성시켜야 한다. 전형적인 백트래킹 문제이다. 정답 코드 import java.util.Scanner; class Main { static int[][] map = new int[9][9]; public static void main(String[] args) { Scanner sc = new Scann..
https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net DFS + BFS문제이다. 핵심 3개의 벽을 반드시 세워야 한다. 처음에는 특정조건에 기둥을 세워야 한다고 생각하였지만, N의 값이 8 이하인 것을 보고 모든 경우의 수를 적용해도 된다. 이후 바이러스를 퍼트린다. 남은 0의 개수를 찾는다. 정답 코드 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public cla..
https://www.acmicpc.net/problem/1132 1132번: 합 N개의 수가 주어진다. 이 숫자는 모두 자연수이고, 알파벳 A부터 J가 자리수를 대신해서 쓰여 있다. 이 알파벳은 모두 한 자리를 의미한다. 그리고, 각 자리수는 정확하게 알파벳 하나이다. 0으로 www.acmicpc.net 전에 풀었던 문제에서 조건이 하나 추가되었다. 핵심 위의 문제는 만약 ABC + DAB 라면 100A + 10B +C + 100D+ 10A+B로 둘 수 있다. 이를 110A + 100D +11B +C로 둘 수 있다. 따라서 A에 가장 큰 9, D에 8B에 7C에 6을 넣어주면 된다. 단 새로운 조건이 추가되었다. 맨 앞자리가 0이 되면 안 된다. 위의 경우에는 해당되지 않지만, 수가 많아지면 0의 조건..
https://school.programmers.co.kr/learn/courses/30/lessons/72412 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 이 문제는 이진탐색을 사용하여 풀 수 있다. 핵심 이 문제는 정확성만 보자면, 완전탐색으로 구할 수 있다. 하지만 효율성을 통과하기 위해 이진탐색을 사용해야 한다. info의 정보를 가지고 "-"를 포함한 모든 조합을 map의 키값으로 가지고 이후 value값을 정렬시켜 이진탐색을 하면 된다. 정답 코드 import java.util.*; class Solution { static Map map;..
https://school.programmers.co.kr/learn/courses/30/lessons/72411 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 조합을 이용한 문제이다. 핵심 사람들이 주문한 상품들을 갖고 조합을 만들어서 가장 많이 나온 조합으로 메뉴를 만드는 것이다. 로직 자체는 있는 단순하다. 정답 코드 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List;..
https://www.acmicpc.net/problem/1525 1525번: 퍼즐 세 줄에 걸쳐서 표에 채워져 있는 아홉 개의 수가 주어진다. 한 줄에 세 개의 수가 주어지며, 빈 칸은 0으로 나타낸다. www.acmicpc.net bfs를 이용하여 풀 수 있다. 핵심 2차원 배열을 일렬로 두고 그 값자체를 가지고 판단하면 편하게 구할 수 있다. 값의 위치를 바꿀 때 각각의 index를 알아야 하는데, 이때 StringBuilder를 이용하면 쉽게 위치를 바꿀 수 있다. StringBuilder.setCharAt -> 특정 위치에 char를 삽입할 수 있다. 이를 활용하여 풀어보자. 정답 코드 import java.util.HashMap; import java.util.LinkedList; import..