본문 바로가기
반응형

알고리즘 문제 풀이24

행렬 테두리 회전하기 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 처음에는 실제 회전을 하지 않고도 값을 구할 수 있지 않을까 싶었는데, 숫자를 움직이면서 최소값을 구하다보니 회전 범위에 따라 값이 계속 바뀌니 실제 회전을 시켜야 겠구나 싶었다. 먼저 아래와 같이 숫자를 초기화 한 board 를 만들어준다. public Integer[] solution(int rows, int columns, int[][] queries) { int[][] board = createBoard(rows, columns); } private int[][] createBoard(int rows, int columns) { int[][] board = new int[rows][columns]; int no = 1; for (int.. 2022. 7. 15.
카카오프렌즈 컬러링북 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 어피치 그림 예제와 예제 입출력이 무슨 관련이 있는지 영 이해가 안가서 계속 보다가 입출력만 살펴보자 해서 배열을 나열하니 대충 무슨 말인지 이해가 갔다. 위 모양을 보면 숫자별로 인접해있는 영역이 4개 임을 알 수 있다. (0은 빈 영역이라 제외한다) 그리고 숫자별로 가장 많은 개수는 5개 이다. (왼쪽 상단 1영역) 그래서 답이 [4, 5] 가 나오는 것이다. 이제 코드로 풀어보자. for (int i = 0; i < picture.length; i++) { for (int j = 0; j < picture[0].length; j++) { if (visit[i][j] || picture[i][j] == 0) { continue; } bfs.. 2022. 7. 12.
2017 팁스타운 짝지어 제거하기 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 처음에는 문자열을 하나씩 순회하면서 이전 알파벳과 현재 알파벳을 비교해서 같으면 문자열을 제거하는 식으로 구현했는데, 코드를 제출하니 효율성 체크까지 있어서 시간 초과가 났다.. 고민하다가 생각이 안나서 힌트를 참조했는데 Stack 을 이용하면 된다는 글을 보았다. 처음에는 while 문으로 문자열이 모두 사라질 때까지 순회하면서 체크를 했었는데, Stack 을 이용하니까 for 문 한번으로 끝나는거 보고 넘나 어이없었음.. 방법은 간단하다. 맨처음 Stack 에 알파벳을 넣고, 문자열의 알파벳을 하나씩 체크하면서 맨 나중에 Stack 으로 들어간 값이랑 비교 (peek) 하면서 만약 값이 같다면 Stack 에 들어가 있는 알파벳을 제거한다... 2022. 7. 9.
2019 KAKAO BLIND RECRUITMENT 오픈채팅방 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 잘 생각해보면 유저의 아이디는 변하지 않고, 변하는 건 유저의 닉네임이다. 따라서 유저의 아이디 닉네임을 HashMap 으로 저장해놓고, 결과를 출력하기 전에 모든 record 를 순회하면서 HashMap 에 있는 유저의 닉네임으로 변경시켜준 후 결과를 출력하면 쉽게 풀수있다. 먼저 아이디, 닉네임을 저장 할 HashMap 을 하나 만들어준다. Map userIds = new HashMap(); 그 후 record 를 순회하면서 값을 체크해주는데, Leave 의 경우 2 단어 (행동, 아이디) 로 들어오기 때문에 닉네임을 임의로 빈 값으로 지정한다. for (String userInfo : record) { StringTokenizer st .. 2022. 7. 7.
백준: 사탕 게임 본 풀이는 java 언어를 사용하였습니다. 3085번: 사탕 게임 풀이 아래처럼 보드의 각 칸마다 해당 칸의 사탕을 상, 하, 좌, 우 움직이면서 다른 사탕과 바꾼 후 바꿀 때마다 행, 열의 연속된 사탕 최대 개수를 구하면서 그 중에 가장 큰 개수를 구하면 풀 수 있을 것 같았다. (완전 탐색) 먼저, 사탕을 움직이기 전에 현재 보드에 있는 행, 열의 연속된 최대 사탕 개수를 구한다. 해당 로직은 checkMaxCountOfCandyToEat() 메서드로 분리한다. public int solution(String[][] board, int n) { int maxCountOfCandyToEat = checkMaxCountOfCandyToEat(board, n); } 행, 열의 연속된 최대 사탕 개수는 아래.. 2022. 2. 11.
프로그래머스 : 완주하지 못한 선수 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 해당 문제는 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. 라는 조건이 있기 때문에, for 문으로 순회하면서 풀면 시간 초과로 실패하게 된다. 따라서 이 문제는 해시 문제로 효율성까지 생각하면서 코드를 작성해야한다. 마라톤 경기에 참여한 선수를 HashMap 에 모두 넣어 준다. 여기서 주의할 점은 중복되는 이름이 있을 수 있기 때문에, 이 부분을 잘 체크해주어야 한다. HashMap 의 key 는 경기에 참여한 선수 이름, value 는 해당 이름의 인원 수 이다. Map map = new HashMap(); for (String name : participant) { if (map.containsKey(name.. 2021. 8. 13.