알고리즘 4문제, SQL 1문제, 제한 시간 210분
'Test Result' 카테고리의 다른 글
[Test Result] 프로그래머스 [2022 하반기 데브매칭] (0) | 2022.11.30 |
---|---|
[Test Result] 프로그래머스 과제 연습 [주문관리 API 서버 개발] (0) | 2022.11.30 |
알고리즘 4문제, SQL 1문제, 제한 시간 210분
[Test Result] 프로그래머스 [2022 하반기 데브매칭] (0) | 2022.11.30 |
---|---|
[Test Result] 프로그래머스 과제 연습 [주문관리 API 서버 개발] (0) | 2022.11.30 |
알고리즘 3문제, SQL 1문제, 제한 시간 120분
[Test Result] 프로그래머스 [2022 자비스앤빌런즈] (0) | 2022.11.30 |
---|---|
[Test Result] 프로그래머스 과제 연습 [주문관리 API 서버 개발] (0) | 2022.11.30 |
<추가 또는 변경한 파일>
BadRequestException : (추가) 400 예외 처리를 위해
GeneralExceptionHandler : (변경) 400 예외 처리를 위해
JdbcOrderRepository : (추가) orders 테이블의 데이터 조회, 변경을 위해
JdbcProductRepository : (변경) products 테이블의 데이터 변경을 위해
JdbcReviewRepository : (추가) reviews 테이블의 데이터 조회, 추가를 위해
Order : (추가) Order Entity
OrderDto : (추가) Order Dto
OrderRepository : (추가) JdbcOrderRepository 추가를 위해
OrderRestController : (추가) 6개의 메소드
OrderRestControllerTest : (변경) 정상적인 테스트를 위해 어노테이션 추가
OrderService : (추가) 6개의 메소드
ProductRepository : (변경) JdbcProductRepository 변경을 위해
ProductRestController : (변경) 2개의 메소드
ProductService : (변경) 1개의 메소드 추가
Review : (추가) Review Entity
ReviewDto : (추가) Review Dto
ReviewRepository : (추가) JdbcReviewRepository 추가를 위해
ReviewRestController : (추가) 1개의 메소드
ReviewRestControllerTest : (변경) 정상적인 테스트를 위해 어노테이션 추가
ReviewService : (추가) 2개의 메소드
[Test Result] 프로그래머스 [2022 자비스앤빌런즈] (0) | 2022.11.30 |
---|---|
[Test Result] 프로그래머스 [2022 하반기 데브매칭] (0) | 2022.11.30 |
function solution(name) {
var answer = 0;
var changeCnt = 0;
let moveCnt = name.length - 1; // max 값은 name길이 -1
for (var i = 0; i < name.length; i++) {
let asciiValue = name.charCodeAt(i); // A 65 Z 90
if (asciiValue < 78) {
changeCnt += (asciiValue - 65); // A -> B 방향으로 변경하는 게 빠른 경우 // B일 경우 1
} else {
changeCnt += (91 - asciiValue); // Z일 경우 1이 나와야 함
}
let nextIndex = i + 1; // 다음 문자 확인을 위한 인덱스
while (nextIndex < name.length && name.charCodeAt(nextIndex) == 65) { // nextIndex는 name.length - 1보다 크지 않을 때까지 연속해서 A가 나오는지 확인이 필요하다.
nextIndex += 1;
}
// nextIndex는 A 다음의 문자 인덱스를 가리키게 된다.
moveCnt = Math.min(moveCnt, (i * 2) + name.length - nextIndex); // 이동 거리 최소 카운트로 갱신
}
answer = moveCnt + changeCnt;
return answer;
}
alert(solution("JEROEN")); // 56
/* <var>
변수 중복 선언 가능하여, 예기치 못한 값을 반환할 수 있다.
함수 레벨 스코프로 인해 함수 외부에서 선언한 변수는 모두 전역 변수로 된다.
변수 선언문 이전에 변수를 참조하면 언제나 undefined를 반환한다. */
/* <let>
let 키워드로는 변수 중복 선언이 불가하지만, 재할당은 가능하다. */
/* <const>
const가 let과 다른 점이 있다면, 반드시 선언과 초기화를 동시에 진행되어야 한다. */
프로그래머스 조이스틱 문제 풀이 JavaScript
public class Solution {
// 순위
// Floyd Warshall 알고리즘으로 풀이
public static int solution(int n, int[][] results) {
int answer = 0;
int zeroCnt = 0;
int[][] board = new int[n][n]; // 0 ~ 4
for (int i = 0; i < results.length; i++) {
// {4, 3}의 경우
board[results[i][0] - 1][results[i][1] - 1] = 1; // 4는 3에게 이겼으므로 board[3][2] = 1
board[results[i][1] - 1][results[i][0] - 1] = -1; // 3은 4에게 졌으므로 board[2][3] = -1
}
// 0 : {0, 1, 0, 0, 0}
// 1 : {-1, 0, -1, -1, 1}
// 2 : {0, 1, 0, -1, 0}
// 3 : {0, 1, 1, 0, 0}
// 4 : {0, -1, 0, 0, 0}
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (k == i || i == j || k == j) { // 자기 자신과의 경기는 있을 수 없다.
continue;
}
if (board[i][j] == 0) { // i와 j의 경기 결과를 분실했다면
if (board[i][k] == 1 && board[k][j] == 1) { // i가 k에게 이기고, k가 j에게 이겼다면
board[i][j] = 1; // i는 j에게 이긴 것으로 체크
} else if (board[i][k] == -1 && board[k][j] == -1) { // i가 k에게 지고, k가 j에게 졌다면
board[i][j] = -1; // i는 j에게 진 것으로 체크
}
}
}
}
}
// 0 : {0, 1, 0, 0, 1}
// 1 : {-1, 0, -1, -1, 1} // 자기 자신을 제외하고 다른 모든 선수들과의 경기 결과를 알 수 있는 선수
// 2 : {0, 1, 0, -1, 1}
// 3 : {0, 1, 1, 0, 1}
// 4 : {-1, -1, -1, -1, 0} // 자기 자신을 제외하고 다른 모든 선수들과의 경기 결과를 알 수 있는 선수
for (int i = 0; i < n; i++) {
zeroCnt = 0;
for (int j = 0; j < n; j++) {
if (board[i][j] == 0) {
zeroCnt++;
}
}
if (zeroCnt == 1) {
answer++;
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 5;
int[][] results = {{4, 3}, {4, 2}, {3, 2}, {1, 2}, {2, 5}};
System.out.println(solution(n, results)); // 2
}
}
프로그래머스 순위 문제 풀이 Java
[Java] 프로그래머스 [Level-3] 숫자 타자 대회 (0) | 2022.12.13 |
---|---|
[Java] 프로그래머스 [Level-4] 쌍둥이 빌딩 숲 (0) | 2022.12.06 |
[Java] 프로그래머스 [Level-2] 롤케이크 자르기 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-3] 양과 늑대 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-3] 아이템 줍기 (0) | 2022.11.29 |
import java.util.HashMap;
public class Solution {
// 롤케이크 자르기
public static int solution(int[] topping) {
int answer = 0;
HashMap<Integer, Integer> hm1 = new HashMap<>();
HashMap<Integer, Integer> hm2 = new HashMap<>();
for (int i = 0; i < topping.length; i++) {
hm2.put(topping[i], hm2.getOrDefault(topping[i], 0) + 1);
}
// hm2 : {1=4, 2=2, 3=1, 4=1}
for (int i = 0; i < topping.length; i++) {
hm1.put(topping[i], hm1.getOrDefault(topping[i], 0) + 1);
if (hm2.containsKey(topping[i])) {
hm2.put(topping[i], hm2.get(topping[i]) - 1);
}
if (hm2.get(topping[i]) == 0) {
hm2.remove(topping[i]);
}
if (hm1.size() == hm2.size()) { // hm1 : {1=2, 2=1, 3=1}, hm2 : {1=2, 2=1, 4=1} // hm1 : {1=3, 2=1, 3=1}, hm2 : {1=1, 2=1, 4=1}
answer++;
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] topping = {1, 2, 1, 3, 1, 4, 1, 2}; // 1, 2, 1, 3과 1, 4, 1, 2로 잘랐을 떄, 1, 2, 1, 3, 1과 4, 1, 2로 잘랐을 때
System.out.println(solution(topping)); // 2
}
}
프로그래머스 롤케이크 자르기 문제 풀이 Java
[Java] 프로그래머스 [Level-4] 쌍둥이 빌딩 숲 (0) | 2022.12.06 |
---|---|
[Java] 프로그래머스 [Level-3] 순위 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-3] 양과 늑대 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-3] 아이템 줍기 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-2] 피로도 (0) | 2022.11.29 |
import java.util.ArrayList;
import java.util.HashMap;
public class Solution {
// 양과 늑대
static int maxSheepCnt;
static HashMap<Integer, ArrayList<Integer>> hm;
public static void dfs(int currentIndex, int s, int w, ArrayList<Integer> indexList, int[] info) {
if (info[currentIndex] == 0) {
s += 1;
} else {
w += 1;
}
if (s <= w) return;
maxSheepCnt = Math.max(maxSheepCnt, s);
ArrayList<Integer> nextIndexList = new ArrayList<>();
nextIndexList.addAll(indexList);
if (hm.containsKey(currentIndex)) {
nextIndexList.addAll(hm.get(currentIndex));
}
nextIndexList.remove(Integer.valueOf(currentIndex));
for (int nextIndex : nextIndexList) {
dfs(nextIndex, s, w, nextIndexList, info);
}
return;
}
public static int solution(int[] info, int[][] edges) {
maxSheepCnt = 0;
hm = new HashMap<>();
for (int i = 0; i < edges.length; i++) {
if (!hm.containsKey(edges[i][0])) {
hm.put(edges[i][0], new ArrayList<>());
}
hm.get(edges[i][0]).add(edges[i][1]);
}
// hm : {0=[1, 8], 1=[2, 4], 4=[3, 6], 6=[5], 8=[7, 9], 9=[10, 11]}
ArrayList<Integer> startIndexList = new ArrayList<>();
startIndexList.add(0);
dfs(0, 0, 0, startIndexList, info);
return maxSheepCnt;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] info = {0,0,1,1,1,0,1,0,1,0,1,1};
int[][] edges = {{0,1},{1,2},{1,4},{0,8},{8,7},{9,10},{9,11},{4,3},{6,5},{4,6},{8,9}};
System.out.println(solution(info, edges));
}
}
프로그래머스 양과 늑대 문제 풀이 Java
[Java] 프로그래머스 [Level-3] 순위 (0) | 2022.11.29 |
---|---|
[Java] 프로그래머스 [Level-2] 롤케이크 자르기 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-3] 아이템 줍기 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-2] 피로도 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-2] 모음사전 (0) | 2022.11.29 |
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
// 아이템 줍기
public static int solution(int[][] rectangle, int characterX, int characterY, int itemX, int itemY) {
int answer = 0;
int[][] board = new int[101][101]; // 전체 영역
boolean[][] visited = new boolean[101][101]; // 방문한 좌표인지 확인을 위한 2차원 boolean 배열
int[] dx = {0, 0, -1, 1}; // 상, 하, 좌, 우 이동에서 x 좌표 증감 값
int[] dy = {1, -1, 0, 0}; // 상, 하, 좌, 우 이동에서 y 좌표 증감 값
// STEP 1. 모든 사각형의 모서리 영역과 내부 영역을 1로 채운다.
for (int i = 0; i < rectangle.length; i++) {
int[] eachRectangle = rectangle[i]; // 하나의 사각형 꼭지점 정보가 담긴 배열
// 그림1의 문제를 해결하기 위해 모든 좌표 값의 크기를 2배로 해준다.
for (int x = eachRectangle[0] * 2; x <= eachRectangle[2] * 2; x++) {
for (int y = eachRectangle[1] * 2; y <= eachRectangle[3] * 2; y++) {
board[x][y] = 1;
}
}
}
// STEP 2. 모서리 영역을 제외한 내부 영역을 0으로 채운다.
for (int i = 0; i < rectangle.length; i++) {
int[] eachRectangle = rectangle[i]; // 하나의 사각형 꼭지점 정보가 담긴 배열
// 시작 꼭지점 좌표 + 1 ~ 마지막 꼭지점 좌표 - 1까지 0으로 채우면 사각형 내부 영역이 0으로 채워지게 된다.
for (int x = eachRectangle[0] * 2 + 1; x <= eachRectangle[2] * 2 - 1; x++) {
for (int y = eachRectangle[1] * 2 + 1; y <= eachRectangle[3] * 2 - 1; y++) {
board[x][y] = 0;
}
}
}
// STEP 3. 캐릭터의 이동 정보를 담을 클래스 CharacterPosition에 캐릭터 초기값 세팅
CharacterPosition characterPosition = new CharacterPosition(characterX * 2, characterY * 2, 0);
// STEP 4. BFS 수행
Queue<CharacterPosition> q = new LinkedList<>();
q.add(characterPosition);
visited[characterX * 2][characterY * 2] = true;
while (!q.isEmpty()) {
CharacterPosition tempCharacterPosition = q.poll();
if (tempCharacterPosition.x == itemX * 2 && tempCharacterPosition.y == itemY * 2) { // 캐릭터가 아이템 위치에 도달했다면
answer = tempCharacterPosition.moveCnt / 2;
break;
}
for (int i = 0; i < 4; i++) { // 상, 하, 좌, 우 이동
int nextX = dx[i] + tempCharacterPosition.x;
int nextY = dy[i] + tempCharacterPosition.y;
// 직사각형을 나타내는 모든 좌표값은 1 이상 50 이하인 자연수입니다. 이 조건에 의해 2배 값인 2부터 100까지가 캐릭터의 이동 가능 범위가 된다.
if (nextX < 2 || nextX > 100 || nextY < 2 || nextY > 100) {
continue;
}
if (!visited[nextX][nextY] && board[nextX][nextY] == 1) { // 방문하지 않은 모서리 영역이라면
q.offer(new CharacterPosition(nextX, nextY, tempCharacterPosition.moveCnt + 1));
visited[nextX][nextY] = true;
}
}
}
return answer;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] rectangle = {{1,1,7,4},{3,2,5,5},{4,3,6,9},{2,6,8,8}};
int characterX = 1;
int characterY = 3;
int itemX = 7;
int itemY = 8;
// 전체 영역을 만들고, 모든 사각형의 모서리 영역과 내부 영역을 1로 채운 후, 내부 영역만 다시 0으로 채워 모서리에 남은 값 1을 따라서 좌표 이동을 하도록 만들면 된다.
// 아래 그림1을 보면 서로 떨어져 있는 사각형이지만 두 모서리의 간격이 1이기 때문에 1을 따라서 좌표 이동을 할 경우 두 사각형이 붙어있는 것으로 인식하는 문제가 발생한다.
// 모든 사각형의 좌표, 캐릭터의 좌표, 아이템의 좌표를 x2 하여 문제를 해결할 수 있다.
// 이후 총 이동 거리에서 나누기 2를 해주면 된다.
// int[][] rectangle = {{2,2,14,8},{6,4,10,10},{8,6,12,18},{4,12,16,16}};
// int characterX = 2;
// int characterY = 6;
// int itemX = 14;
// int itemY = 16;
// 조건을 위와 같이 바꾼 후 문제를 풀고, 결과 값의 1/2을 답으로 제출하면 된다.
System.out.println(solution(rectangle, characterX, characterY, itemX, itemY));
}
}
public class CharacterPosition {
int x = 0;
int y = 0;
int moveCnt = 0;
public CharacterPosition(int x, int y, int moveCnt) {
this.x = x;
this.y = y;
this.moveCnt = moveCnt;
}
}
프로그래머스 아이템 줍기 문제 풀이 Java
[Java] 프로그래머스 [Level-2] 롤케이크 자르기 (0) | 2022.11.29 |
---|---|
[Java] 프로그래머스 [Level-3] 양과 늑대 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-2] 피로도 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-2] 모음사전 (0) | 2022.11.29 |
[Java] 프로그래머스 [Level-3] 정수 삼각형 (0) | 2022.11.29 |