본문 바로가기

알고리즘 문제77

[백준 - Java] 14499번 : 주사위 굴리기 (삼성 SW 역량 테스트 기출 문제) 문제 www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net 설명 주사위 굴리는걸 어떻게 해야 하나 고민하는데 시간을 많이 쏟았다 ㅠ____ㅠ 근데 주사위만 굴리면 다 해결되는 문제. ㄹㅇ 아래 주사위를 기준으로 상하좌우 굴려보면 규칙을 찾을 수 있다. 2 4 1 3 5 6 나는 주사위의 Top, Bottom, Up, Down, Left, Right 6면을 모두 고려해 주사위를 굴렸는데 이렇게 하지 .. 2021. 2. 10.
[백준 - Java] 3190번 : 뱀 (삼성 SW 역량 테스트 기출 문제) 문제 www.acmicpc.net/problem/3190 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 설명 문제에서 설명한 대로 차례로 구현하면 된다. 특이점이라면 뱀의 정보를 Deque에 저장한다. Deque는 양방향으로 구현한 Queue로 머리와 꼬리의 위치가 추가되고 삭제되는 뱀의 정보를 저장하기에 적합하다. 방향의 경우 상 좌 하 우 (0, 1, 2, 3) 순서로 dx, dy배열을 만들었고, 나머지 연산을 통해 간단히 90도 방향 전환을 할 수 있게 만들었다. ex) snakeDir = (snakeDir+.. 2021. 2. 9.
[프로그래머스 - Java] 징검다리 건너기 (2019 카카오 개발자 겨울 인턴십) 문제 programmers.co.kr/learn/courses/30/lessons/64062 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 설명 제한 사항을 보면 stones 배열의 크기는 1 이상 200,000 이하, stones 배열 각 원소들의 값은 1 이상 200,000,000 이하인 자연수이다. 한 명 한 명 징검다리를 건너 보내면서 총 몇 명이 징검다리를 건널 수 있는지 확인한다면 굉장히 많은 시간이 걸림. 시간 초과가 나서 효율성에서 탈락함ㅠㅠㅠ 시간을 줄일 방법을 생각해서 문제를 풀어야 한다. 1. 이진 탐색으로 풀이 이진 탐색을 이용해 탐색의 시간을 줄이자! * 이진 탐색과 관련된 포스트는 아래를 확인해주.. 2021. 2. 6.
[프로그래머스 - Java] 경주로 건설 (2020 카카오 인턴십) 문제 programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 설명 DFS로 모든 경로를 찾고, 경로마다 비용을 계산하며 최소 비용을 구하면 되겠다 생각도 했.. 2021. 1. 31.
[프로그래머스 - Java] 신규 아이디 추천 (2021 KAKAO BLIND RECRUITMNET) 문제 programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 카카오계정개발팀에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. 네오에게 주어진 첫 업무는 새로 가 programmers.co.kr 전체 코드 문제에서 요구하는 7단계에 따라 문자열 메소드를 잘 이용해 처리하면 된다. 코드에 단계별로 주석을 달아놓았다. class Solution { public String solution(String new_id) { // 1. 소문자로 변경 new_id = new_id.toLowerCase(); // 2. 소문자 숫자 -_. 제외한 모든 문자 제거 String.. 2021. 1. 29.
[프로그래머스 - Java] 수식 최대화 (2020 카카오 인턴십) 문제 programmers.co.kr/learn/courses/30/lessons/67257 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 설명 연산을 위해 주어진 String 형태의 수식을 숫자와 연산자로 구분해 ArrayList에 저장한다. (모두 한 번에 expList라고 저장해서 풀기도 했었는데, 5개 정도의 테스트 케이스에서 런타임 에러 난다..ㅠㅠ왜지..?) 숫자의 경우 long으로 저장하고 계산한다. +, -, * 3개의 연산자를 바탕으로 순열을 구해 연산자 우선순위를 정한다. 구해진 순열을 .. 2021. 1. 29.
[백준 - Java] 1931번 : 회의실 배정 문제 www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 처음엔 막 시작시간이랑 끝 시간이랑 비교하고 이중 for문 쓰면서 삽질했는데 시간 초과남~~! 정렬을 써서 for문은 최대한 한번으로 끝내도록 설계해야 함 끝나는 시간을 기준으로 오름차순 정렬, 끝나는 시간이 같다면 시작 시간 기준 오름차순으로 정렬을 해놓는다. 끝나는 시간이 제일 빠른 회의부터 마지막 회의까지 돌면서 현재 회의의 끝나는 시간과 같거나 더 늦은 시간에 시작하는 회의라면 회의실을 사용할 수 있다. 이런 식으로 마지막까지 확인하면 사용할 수 있는 최대의 회의수를 구할 수 있다. 전체 코드 import java.. 2021. 1. 25.
[백준 - Java] 1946번 : 신입 사원 문제 www.acmicpc.net/problem/1946 1946번: 신입 사원 첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성 www.acmicpc.net 설명 처음에는 이해가 안 갔다. 하지만 생각해보면 쉬운 문제. 먼저 서류 등수를 기준으로 오름차순 정렬을 한다. 정렬을 해놓으면 이중 for문을 쓰는 등의 일일이 찾는 일 없이, for문 하나로 순차적으로 파악이 가능해진다. (정렬 안 하고 이중 for문이라도 쓰는 순간 시간 초과남!!) 서류 1등은 다른 지원자들과 비교 안 해도 됨. 서류 2등부터 면접 등수만 가지고 다른 지원자보다.. 2021. 1. 25.
[백준 - Java] 1389번 : 케빈 베이컨의 6단계 법칙 문제 www.acmicpc.net/problem/1389 1389번: 케빈 베이컨의 6단계 법칙 첫째 줄에 유저의 수 N (2 ≤ N ≤ 100)과 친구 관계의 수 M (1 ≤ M ≤ 5,000)이 주어진다. 둘째 줄부터 M개의 줄에는 친구 관계가 주어진다. 친구 관계는 A와 B로 이루어져 있으며, A와 B가 친구라는 뜻 www.acmicpc.net 풀이 전 여담 풀고 나니 별거 아닌 문제였는데 많은 시간을 소비했다ㅠㅠ 일단 나는 BFS로 풀었다. 근데 검색해보니 이게 플로이드 와샬 알고리즘이라고 한다. (추후에 공부 다시 해서 정리할 것!!) * BFS 원래 알고리즘 대로 쓰면 안 됨 조건이 필요 예제에서 1번과 5번 친구의 경우 (1, 3, 4, 5)로 4번 만에 친구가 되는데 (1, 4, 5)로 최.. 2021. 1. 23.
[백준 - Java] 16234번 : 인구 이동 문제 www.acmicpc.net/problem/16234 16234번: 인구 이동 N×N크기의 땅이 있고, 땅은 1×1개의 칸으로 나누어져 있다. 각각의 땅에는 나라가 하나씩 존재하며, r행 c열에 있는 나라에는 A[r][c]명이 살고 있다. 인접한 나라 사이에는 국경선이 존재한다. 모 www.acmicpc.net 설명 문제의 설명이 부족한 것 같다. 처음에 나는 인구 이동을 할 때마다 정답 변수 answer를 +1 해주어 총인구 이동 수를 구했다. 하지만 인구 이동 할때마다 +1 해주는 것이 아니라, 인구 이동이 총 며칠 동안 이루어졌는지를 구해야 한다. 즉, 전체 정점(나라)을 돌면서 연합이 이루어지고, 인구가 이동하는 작업을 따져본다면 인구 이동은 0~n번 일어날 수 있다. 예를 들어 입력 5번의.. 2021. 1. 20.
반응형