생각2차 배열로 주어진 등산로에서 가장 긴 등산로를 찾는 문제이다. 등산로는 높은 숫자에서 낮은 숫자로만 이동할 수 있다. 이 때, K 값이 주어지는데 이 K는 한 등산로를 만들 때 한 번만 사용할 수 있는 지형을 파괴할 수 있는 높이이다. 만약 처음 등산로가 9로 시작하면 근처에 있는 9로는 못가게되지만 파괴를 한 번 할 수 있는 기회를 사용해서 K=1 일 경우 다음 9를 8로 만들어서 진행 할 수 있다. 처음 생각우선 List를 이용해서 처음에 등산로의 숫자를 입력받는 부분에서 가장 높은 숫자가 나오면 List에 추가해 주어 등산로의 출발 경로를 설정하였다.▶ Max가 바뀔 경우 List를 초기화 하여 이전 출발 경로들을 없애고 새로 넣어준다. 다음 생각등산로의 출발 점을 하나씩 DFS 탐색하면서 가..
생각주어진 예제는 다음과 같다빈 칸은 '.'로 짐이 있는 칸은 'X'로 주어진다. 빈 칸이 두칸 이상 연결되어 있으면 누울 곳이 된다. 위의 경우 가로로 누울곳은 5곳 세로로 누울곳은 4곳이 되므로 5 4 를 출력한다. 처음 생각그대로 조건을 탐색하여 풀이를 하였더니 '틀렸습니다'가 나왔다. 다음 생각짐 칸을 기준으로 새로운 누울곳이 있다면 그곳도 누울곳으로 추가될 수 있었다.문제에서 좀 더 친절하게 "누울곳은 짐칸으로 구분 될 수 있다" 같은 언급을 해주었으면 좋았을 것 같다. 방안1) boolean형 flag 변수를 선언하여 '.'이 두개가 연속되어있으면 누울곳으로 판단해 flag를 false로 바꿔준다.('.'이 짐을 만나기 전에 연속해서 있으면 그 자리는 1개로 쳐야하므로)2) 탐색중 짐을 만나면..
생각단어가 주어지면 해당 단어에서 CAMBRIDGE가 포함된 알파벳을 빼고 출력하여라. 처음 생각해당 단어가 들어있는지 판단해야 하므로 charAt() 메소드를 통해 하나씩 확인하였다. 다음 생각if문 보다 Switch 문이 보기가 더 깔끔하여 switch 문을 택하였다. 방안1) 해당하는 알파벳을 제외한 알파벳을 switch문의 default를 이용하여 출력해주었다. 123456789101112131415161718192021222324252627import java.io.IOException;import java.util.Scanner; public class Main{ public static void main(String[] args) throws IOException{ Scanner sc = n..
2018 하반기 공채 대비 코딩테스트 실전 모의고사 1회 생각프로그래머스에서 진행한 2018 하반기 공채 대비 코딩테스트 실전 모의고사 1회를 풀어보았다.총 3개의 문제가 주어지며, 꼬아져있는 문제는 없었다. 1. 팰린드롬(palindrome) 만들기앞으로 읽을 때와 뒤로 읽을때가 똑같은 단어를 팰린드롬이라고 한다. 두 자연수 n,m이 주어졌을 때 n이상 m이하의 자연수 중 팰린드롬인 숫자의 개수를 return 하여라. 프로그래머스 스타일을 제대로 안 읽은 것일 수도 있지만 백준이나 SW Expert에서 풀때처럼 제한 사항이 적혀있지는 않았다.▶ 코드를 제출하면 제약 사항을 테스트는 하지만 기준은 모르겠다(못 본걸수도 있다)m이 최대 50만 까지이므로 n이 1이라고 치면 총 50만개의 숫자를 살펴보면 되..
1) 생각 12달 동안의 월별 수영장 이용 일 수와 1일, 1달, 3달, 12달 이용권의 가격이 주어진다. 최소한의 금액으로 수영장을 다닐 수 있겠끔 최소 금액을 출력하여라. 처음 생각DFS를 이용해서 1일 1달과 한달은 idx+1을 3달은 idx+3을 1년은 idx+12를 하여 idx가 12보다 크거나 같아지면 해당 값까지의 sum 값의 최소값을 구하였다. 다음 생각위의 방식으로는 대다수의 case는 통과하였지만 1개가 통과되지 않았다. 3달을 구할 때 무작정 더하면 안됐던 것이다. 세달 연속 이용 일 수가 모든 달이 0 0 0 이면 이용하지 않아도 되기 때문에 해당 조건을 추가해주었다. 마찬가지로 달마다의 금액도 해당 달의 이용일 수가 0보다 클 경우에만 더해주었다. 2) 방안 1) 재귀를 이용한 D..
1) 생각 n개의 숫자와 n-1개의 연산자를 줄 때 만들 수 있는 가장 큰 숫자와 가장 작은 숫자의 차이를 구하여라(연산은 무조건 앞에서 부터 진행한다.) 처음 생각맨 처음 숫자를 필두로 1개식 연사자를 바꿔가며 모든 경우를 만들어 보면 되므로 재귀로 해결하였다. 2) 방안 1) 재귀의 인자를 4개의 연사자를 다 넣을지 배열로 넣을지 고민하다 그냥 다 넣었다.2) 재귀에서 가장 중요한 점은 가지치기 이므로 idx를 벗어나지 않도록 idx의 값이 n까지 다달으면 max와 min을 갱신해주고 return 해주었다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import java.io.IOE..
1) 생각 배틀 필드 게임을 개발하려고 한다. 주어진 조건에 맞게 구현하여라. 처음 생각조건에 맞춰 구현을 하는 시뮬레이션 문제이다. 다음 생각기본 적인 구현을 한 뒤, LEFT RIGHT UP DOWN 방향을 알고 있어야 SHOOT을 그 방향으로 할 수 있으므로 Field 선언을 통해 항상 탱크의 방향을 갱신해주었다. 다다음 생각'Fail'이 떠서 머가 문제인지 찾기 어려웠으나 시뮬레이션은 문제가 답이므로 문제를 더 꼼꼼히 읽어본 결과 SHOOT을 하였을 때, 벽(*)을 만났을 경우 메소드를 종료시키지 않고 있었다. 2) 방안 1) SHOOT을 할 때 방향 변수에 따라서 4개의 조건으로 나뉘고 그 이후를 탐색한다. '#'을 만나면 바로 종료하고 '*'을 만나면 지도 배열을 '.'로 바꿔주고 종료한다. ..
1) 생각 4개의 정류장이 주어지고 각 정류장마다 탄사람과 내린사람이 주어진다. 이 때, 탑승 인원이 가장 많을 때를 출력하여라. 처음 생각각 정류장 별로 탄사람과 내린사람 수가 주어지므로 전체 탑승 인원에서 탄사람은 + 내린 사람은 -를 해준다. 2) 방안 1) 입력이 적어 Scanner를 사용하였다. 1234567891011121314151617import java.io.IOException;import java.util.Scanner; public class Main { public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); int inner = 0; int result = 0; f..
1) 생각 괄호가 올바로 짝지어지면 1 그렇지 않으면 0을 출력하라. 처음 생각한 바퀴를 쭉 돌면서 괄호를 시작하는 경우인 "(,{,[,"일 경우에는 해당 배열을 -1 해주어 마지막에 음의 값을 가지고 있는 배열이 있을 경우는 0을 그렇지 않으면 1을 출력하였다. 다음 생각주어진 문자열에서 하나의 괄호만 잘못 되었어도 0을 출력해야 한다. 따라서 -1을 하기전 해당 배열이 0이라면 바로 반복문을 종료하였다. 2) 방안 1) switch 문을 사용해서 코드가 길어져서 solve() 메소드로 따로 빼내어 처리를 해주었다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import java.io.IOExc..
1) 생각 입력으로 주어지는 명령을 처리하는 스택을 구현하여라. 처음 생각Java에서 제공해주는 Stack을 써서 풀어볼까 하다가 "구현하여라"라고 적혀있어서 직접 만들어 보았다. 2) 방안 1) Stack class와 inner class로 data class를 만들어서 push 명령어가 들어오면 해당 data 객체의 다음 객체로 이전 객체의 주소를 지정해준다. 코드로 보면 이해하기가 말보다 좋다. 2) Size에 대한 부분은 Stack Class의 Field 영역에 선언하여 push 명령일 때는 +1 pop 명령일 때는 -1 해줌으로서 간단히 하였다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464..
- Total
- Today
- Yesterday