묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결자바 코딩테스트 - it 대기업 유제
문제풀이 확인 부탁드립니다.
package com.company.대기업유제.그래프; import java.util.*; class 교육과정 { public String[] solution(String[] subjects, String[] course){ String[] answer = {}; /** * n개의 교육과정 수료해야함 * 교육과목에는 선수과목이 있다. * 선수과목 관련해서는 위상정렬을 사용한다. * n개의 과목을 모두 이수할수있는 순서를 배열에 담아 반환 * (답이 여러개면 그 중 아무거나 반환) 위상정렬의 특징 * subjects : n개의 과목 목록 * course : 선수과목 정보 * */ //먼저 선수과목을 구분하기 위해 노드들을 생성 Map<String, Node> nodes = createNodes(subjects, course); //후위순회로 탐색 LinkedList<String> result = new LinkedList(); Set<Node> discovered = new HashSet<>(); for (var entry : nodes.entrySet()) { if(!discovered.contains(entry.getValue())){ DFS(entry.getValue(), result, discovered); } } return result.toArray(String[]::new); } private void DFS(Node node, LinkedList<String> result, Set<Node> discovered) { discovered.add(node); for (Node next : node.nexts) { if(!discovered.contains(next)){ DFS(next, result, discovered); } } result.addFirst(node.name); } private Map<String, Node> createNodes(String[] subjects, String[] course) { Map<String, Node> nodeMap = new HashMap<>(); for (String subject : subjects) { nodeMap.put(subject, new Node(subject)); } for (String s : course) { String[] split = s.split(" "); //선수과목 String parent = split[1]; // parent -> child String child = split[0]; Node parentNode = nodeMap.get(parent); Node childNode = nodeMap.get(child); parentNode.nexts.add(childNode); } return nodeMap; } class Node{ public Node(String name) { this.name = name; } final String name; Set<Node> nexts = new HashSet<>(); //하위 과목 } public static void main(String[] args){ 교육과정 T = new 교육과정(); System.out.println(Arrays.toString(T.solution(new String[]{"english", "math", "physics", "art", "music"}, new String[]{"art math", "physics art", "art music", "physics math", "english physics"}))); System.out.println(Arrays.toString(T.solution(new String[]{"art", "economics", "history", "chemistry"}, new String[]{"chemistry history", "economics history", "art economics"}))); System.out.println(Arrays.toString(T.solution(new String[]{"math", "science", "music", "biology"}, new String[]{"science music", "math music", "math science", "biology math"}))); } }
-
미해결자바 코딩테스트 - it 대기업 유제
혼자서 푼 문제 확인 부탁드립니다.
package com.company.대기업유제.그래프; import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; class 공굴리기 { public int solution(int[][] board, int[] s, int[] e) { /** * n * m 격자판 * 0은 빈공간 1은 벽 * * 공은 격자의 상하 좌우 네방향으로 빈공간을 이동할수있음 벽을 만나면 멈춘다. * s 공의 위치 * e 공의 목표지점 * 목표위치까지 최단거리 ㄱ * 목표지점까지 도달못하면 -1 * * */ int[] dx = {-1, 0, 1, 0}; int[] dy = {0, -1, 0, 1}; PriorityQueue<Candidate> queue = new PriorityQueue<Candidate>(); Map<String, Integer> minPosMap = new HashMap<>(); Pos first = new Pos(s[1], s[0]); for (int i = 0; i < 4; i++) { queue.add(new Candidate(first, 0, i)); } while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { Candidate candi = queue.poll(); Pos poll = candi.pos; //벽을 만나지 않았으면 가던 방향으로 계속 이동 if(!candi.frontWall(board, dx, dy)){ Pos newPos = new Pos(candi.pos.x + dx[candi.direction], candi.pos.y + dy[candi.direction]); Candidate newCandi = new Candidate(newPos, candi.cnt + 1, candi.direction); Integer basePrice = minPosMap.getOrDefault(newPos.getName(), Integer.MAX_VALUE); if (basePrice < newCandi.cnt) continue; queue.add(newCandi); minPosMap.put(newPos.getName(), newCandi.cnt); }else{ //벽을 만나면 그때 방향 돌리기 //벽을 만났을때만 목표지점 체크하기 if (poll.x == e[1] && poll.y == e[0]) { // print(board); return minPosMap.getOrDefault(poll.getName(), Integer.MAX_VALUE); } for (int j = 0; j < 4; j++) { int moveX = dx[j] + poll.x; int moveY = dy[j] + poll.y; if (moveX < 0 || moveY < 0 || moveX >= board[0].length || moveY >= board.length) continue; // * 0은 빈공간 1은 벽 if(board[moveY][moveX] == 1) continue; Pos newPos = new Pos(moveX, moveY); Candidate newCandi = new Candidate(newPos, candi.cnt + 1, j); Integer basePrice = minPosMap.getOrDefault(newPos.getName(), Integer.MAX_VALUE); if (basePrice < newCandi.cnt) continue; queue.add(newCandi); minPosMap.put(newPos.getName(), newCandi.cnt); } } } } return -1; } public void print(int[][] board){ for (int i = 0; i < board.length; i++) { for (int j : board[i]) { System.out.print(j + " "); } System.out.println(); } } class Pos { int x; int y; public Pos(int x, int y) { this.x = x; this.y = y; } public String getName() { return x + "" + y; } } class Candidate implements Comparable<Candidate> { Pos pos; int cnt; int direction; public Candidate(Pos pos, int cnt, int direction) { this.pos = pos; this.cnt = cnt; this.direction = direction; } public boolean frontWall(int[][] board, int[] dx, int[] dy){ int moveX = dx[direction] + pos.x; int moveY = dy[direction] + pos.y; if (moveX < 0 || moveY < 0 || moveX >= board[0].length || moveY >= board.length) return true; // * 0은 빈공간 1은 벽 if(board[moveY][moveX] == 1) return true; return false; } @Override public int compareTo(Candidate o) { return this.cnt - o.cnt; } } public static void main(String[] args) { 공굴리기 T = new 공굴리기(); System.out.println(T.solution(new int[][]{{0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}, {1, 0, 1, 1, 1, 0}, {1, 0, 0, 0, 0, 0}}, new int[]{1, 0}, new int[]{4, 5})); System.out.println(T.solution(new int[][]{{0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}, {1, 0, 1, 1, 1, 0}, {1, 0, 0, 0, 0, 0}}, new int[]{0, 0}, new int[]{4, 2})); System.out.println(T.solution(new int[][]{{1, 0, 1, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 1, 0}, {1, 1, 0, 1, 1}, {0, 0, 0, 0, 0}}, new int[]{0, 3}, new int[]{4, 2})); System.out.println(T.solution(new int[][]{{0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0}, {0, 1, 1, 0, 1, 1}, {0, 0, 0, 0, 0, 0}}, new int[]{0, 0}, new int[]{4, 5})); System.out.println(T.solution(new int[][]{{0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, new int[]{0, 0}, new int[]{4, 3})); } } 문제를 다 이해했다고 생각했는데 한참 헤맸네요.. ㅜㅜ AI인턴이 어떻게 동작하는지 모르겠지만 AI로 답변 달아주셔도 됩니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
큰돌님 pdf p32 typedef long long ll;
typedef long long ll;이 코드가 있던데요 pdf에는 숫자 11처럼 나와있어서...계속 해보니깐 안됬었는데 영어L로 하니깐 되네요 ㅠㅠ1.저 코드의 목적은 무엇인가요??2.그리고 터미널을 보면 printf("%.6lf\n", a);를 했을때 결과가 숫자가 엄청길게 나오던데 왜그런건가요??..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
'bits/stdc++.h' file not found
이렇게 에러가 뜨는데요... 어떻게 해결해야할까요???초기세팅단계에서 계속 막히네요 ㅠㅠ ++ 그리고 pdf로 올려주신 책을 먼저보고 강의를 보는건가요?? 순서가 어떤것이 먼저인가요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
조합 구현 관련해서 질문있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 혹시 임의의 배열(벡터)를 인자로 받아서 그 배열의 조합을 리턴하는 방법도 나오나요? 예를들면 vector<int> v = {10, 20, 30, 40, 50}; combi(v, 5, 3); // where 5 == n, 3 == r 10, 20, 30 10, 20, 40 ... 30, 40, 50 위와 같은 방식이요.
-
미해결자바 코딩테스트 - it 대기업 유제
혼자서 푼 문제 확인 부탁드립니다.
import java.util.HashMap; import java.util.Map; import java.util.PriorityQueue; class 방향바꾸기 { public int solution(int[][] board) { int answer = 0; /** * n * m 격자판 지도정보 * 격자판에는 각 1,2,3,4 의 값이 존재 * 1: 오른쪽의 인접한 격자로 이동 * 2. 왼쪽의 인접한 격자로 이동 * 3: 아래로 이동 * 4: 위로 이동 * 0,0부터 오른쪽 아래 맨 끝으로 이동하려고함 * board가 주어지면 목표지점까지 가기위해 방향을 바꾸는 최소 격자 개수 * 한 격자의 방향은 원하는 방향으로 한번만 바꾸기 가능 * * * */ //다익스트라로 인접 순회 할때마다 내가 그 격자를 바라보고있는지 확인 //내가 그 격자를 바라보고있으면 1추가 안함 , 바라보지 않으면 1 추가 int[] dx = {-1, 0, 1, 0}; int[] dy = {0, -1, 0, 1}; PriorityQueue<Candidate> queue = new PriorityQueue(); Map<String, Integer> minPosMap = new HashMap<>(); for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { minPosMap.put(j + ":" + i, Integer.MAX_VALUE); } } Pos first = new Pos(0, 0); //첫번째 시작을 넣는다. queue.add(new Candidate(first, 0)); while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { Candidate candidate = queue.poll(); Pos pos = candidate.pos; if (pos.x == board[0].length - 1 && pos.y == board.length - 1) { // print(board, minPosMap); return candidate.cnt; } for (int j = 0; j < 4; j++) { int moveX = dx[j] + pos.x; int moveY = dy[j] + pos.y; if (moveX < 0 || moveY < 0 || moveX >= board[0].length || moveY >= board.length) continue; //현재 Pos 가 moveX, moveY 를 바라보고 있는지 체크 boolean isLookAt = isLookAt(board[pos.y][pos.x], pos, moveX, moveY); //바라보면 cnt 그대로 바라보지 않으면 cnt++ //내가 추가할 값이 기존에 있는 값보다 작아야함 Pos newPos = new Pos(moveX, moveY); int cnt; if (isLookAt) { cnt = candidate.cnt; } else { cnt = candidate.cnt + 1; } Integer baseCnt = minPosMap.get(newPos.getName()); if (cnt < baseCnt) { minPosMap.put(newPos.getName(), cnt); Candidate newCandi = new Candidate(newPos, cnt); queue.add(newCandi); } } } } return answer; } private static void print(int[][] board, Map<String, Integer> minPosMap) { int cnt = 0; for (Integer value : minPosMap.values()) { System.out.print(value + " "); cnt++; if (cnt % board[0].length == 0) System.out.println(); } } private boolean isLookAt(int direction, Pos pos, int moveX, int moveY) { int x = pos.x; int y = pos.y; // * 1: 오른쪽의 인접한 격자로 이동 // * 2. 왼쪽의 인접한 격자로 이동 // * 3: 아래로 이동 // * 4: 위로 이동 int[][] directionCalculate = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; return y + directionCalculate[direction - 1][0] == moveY && x + directionCalculate[direction - 1][1] == moveX; } class Pos { int x; int y; public Pos(int x, int y) { this.x = x; this.y = y; } public String getName() { return x + ":" + y; } } class Candidate implements Comparable<Candidate> { Pos pos; int cnt; public Candidate(Pos pos, int cnt) { this.pos = pos; this.cnt = cnt; } @Override public int compareTo(Candidate o) { return cnt - o.cnt; } } public static void main(String[] args) { 방향바꾸기 T = new 방향바꾸기(); System.out.println(T.solution(new int[][]{{3, 1, 3}, {1, 4, 2}, {4, 2, 3}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3}, {1, 1, 4, 2}, {3, 4, 2, 1}, {1, 2, 2, 4}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3, 1, 2}, {2, 1, 1, 1, 4, 2}, {2, 2, 2, 1, 2, 2}, {1, 3, 3, 4, 4, 4}, {1, 2, 2, 3, 3, 4}})); System.out.println(T.solution(new int[][]{{3, 2, 1, 3, 1, 2, 2, 2}, {2, 1, 1, 1, 4, 2, 1, 1}, {2, 2, 2, 1, 2, 2, 3, 4}, {1, 3, 3, 4, 4, 4, 3, 1}, {1, 2, 2, 3, 3, 4, 3, 4}, {1, 2, 2, 3, 3, 1, 1, 1}})); System.out.println(T.solution(new int[][]{{1, 2, 3, 2, 1, 3, 1, 2, 2, 2}, {1, 2, 2, 1, 1, 1, 4, 2, 1, 1}, {3, 2, 2, 2, 2, 1, 2, 2, 3, 4}, {3, 3, 1, 3, 3, 4, 4, 4, 3, 1}, {1, 1, 1, 2, 2, 3, 3, 4, 3, 4}, {1, 1, 1, 2, 2, 3, 3, 1, 1, 1}})); } }AI로 답변을 달아주시는 것 같은데 이번에도 확인 부탁드립니다. 해설을 보면 강사님이랑 풀이방식은 비슷한것같습니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
mac c++ 설치관련 질문입니다.
큰돌님께서 알려주신대로 했는데 마지막코드에서 저렇게 나옵니다... :wq이후에 저렇게 나오는데 어떻게 해결해야할까요?
-
해결됨[자바/Java] 문과생도 이해하는 DFS 알고리즘! - 입문편
dfs 매개변수에서 y,x 를 왜 순서를 반대로 쓰셨는지 궁금합니다.
점프왕 젤리문제에서 dfs 메서드에 dfs(int x, int y)가 아닌 dfs(int y, int x)인지 궁금합니다!이전 문제부터 계속 궁금해했는데, 왜 순서를 바꾸셨는지에 대한 명확한 이유를 못찾겠어서 질문올렸습니다.// 점프왕 젤리 import java.util.*; import java.io.*; class Jump_king_jelly { static final int MAX = 3 + 100 + 10; static int map[][]; static boolean visited[][]; static int N; static int dirY[] = {1, 0}; static int dirX[] = {0, 1}; public static void dfs(int y, int x) { visited[y][x] = true; if(y == N && x == N) return; for(int i = 0; i < 2; i++) { int newY = y + dirY[i] * map[y][x]; int newX = x + dirX[i] * map[y][x]; if(visited[newY][newX] == false) { dfs(newY, newX); } } } public static void main(String[] args) throws IOException { // 0. 입력 및 초기화 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); N = Integer.parseInt(br.readLine()); map = new int[MAX][MAX]; visited = new boolean[MAX][MAX]; // 1. map에 정보 반영 for(int i = 1; i <= N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); for(int j = 1; j <= N; j++) { map[i][j] = Integer.parseInt(st.nextToken()); } } // 2. dfs 수행 dfs(1,1); // 3. 출력 if(visited[N][N]) bw.write("HaruHaru"); else bw.write("Hing"); bw.close(); br.close(); } }
-
미해결2주만에 통과하는 알고리즘 코딩테스트 (2024년)
[최적화 (정수론) 21:41 강의 질문] 문제 설명 중에 8까지의 예시를 이해하기 어렵습니다.
안녕하세요 강사님!파이썬 코딩테스트 도전하고 싶은 코린이입니다.강의를 듣고 있던 와중에 21:41초에서 계산하는 8까지의 예시 케이스를 설명하는데, 결과로 나오는 수열이 어떤 수열인지, 연산은 어떻게 되는건지 잘 이해가 되지 않습니다... 1 2 3 4 5 6 7 81 2 1 ... <<< 이게 무슨 수열인거죠? 어떻게 나온거죠? 조금만 더 상세히 설명해주시면 감사하겠습니다...문제 지시문과 영상을 여러번 읽어보아도 잘 이해가 되지 않아서 질문 남깁니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-N 1629번 질문있습니다!
http://boj.kr/32ee2c9fb69842d79baa9f0b375f68f9단순히 연산 코스트를 줄이기 위해 2등분이 아닌 3등분으로도 될까싶어서 짜봤습니다.궁금한 점은 1. 안되는 이유가 연산코스트가 줄지만 ret=(ret*ret*ret)%c; 에서 ret에서 저장할수있는 값을 초과해서일까요?3등분도 아니고 4등분도 아니고 2등분을 선택하신 이유에 대해서 궁금합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-L 1940 주몽 질문있습니다!!
안녕하세요 선생님.이 문제를 맵을 이용해 풀어보려고 했는데요.692 7 4 1 5 3예시가 이렇게 들어올 때 mp[2]=7, mp[7]=2, mp[4]=5 ..... 이런 식으로 저장한 후에 맵을 순회하며 그 해당 요소의 value 값과 똑같은 key의 값이 0이 아니라면 ret을 1 증가시키고 짝이 맞는 key값들은 삭제하는 로직으로 짜봤습니다.예시는 맞지만 틀립니다.궁금한 점은 1.맵을 순회하면서 맵의 요소를 erase하면 문제가 생기는지(디버깅을 해보니 제가 원하는 방식과 다르게 작동하더라구요)2.조건에 맞는 요소들을 안전하게 제거하면서 맵을 순회할수 있는 방법이 있는지입니다.http://boj.kr/8d1b67b0e4c64c5ba02d48e5a656025c
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
이 풀이는 어떤가요?
package hash; import java.util.HashMap; import java.util.Scanner; public class Anagram { public static String solution(String str, String str2) { String result = "YES"; HashMap<Character, Integer> map = new HashMap<>(); for(char ch : str.toCharArray()) { map.put(ch, map.getOrDefault(ch, 0)+1); } for(char ch : str2.toCharArray()) { map.put(ch, map.getOrDefault(ch, 0)-1); } for(char ch : map.keySet()) { if(map.get(ch) != 0) { result = "NO"; break; } } return result; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); String str2 = sc.next(); System.out.println(Anagram.solution(str, str2)); } }str, str2 둘다 같은 Map을 써서 str에 +1, str2에 -1 해주어서 0이 아닐시 NO를 반환하게 코딩하였습니다. 답은 맞게 나오는데 허점? 이 있나 궁금하여 글 남깁니다.
-
미해결자바 코딩테스트 - it 대기업 유제
혼자서 푼 문제 확인 부탁드립니다.
package com.company.대기업유제.너비우선탐색; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; import java.util.Queue; class 숲속의기사 { static class Pos { int x; int y; public Pos(int x, int y) { this.x = x; this.y = y; } } public int solution(int[][] board) { int answer = Integer.MAX_VALUE; /** * 영희는 궁전에서 기사가 지키는 숲을 통과해서 나가야함 * 안전하게 가기위해 기사에게 산딸기를 줘야함 * 최대한 빨리 기사에게 산딸기를 줘야함 * 숲의 지도: R * C 판 형태 * 영희 시작위치, 기사 위치, 산딸기 위치가 표시, 영희가 가지 못하는 위치 * 영희는 산딸기 없이 기사를 지나쳐갈수없음 * 동서남북 하루에 한칸씩 이동 * 영희가 산딸기를 기사에게 가져다주는 가장 짧은 날의 수 * 0 : 영희가 움직일수 있는곳 * 1: 영희가 움직일수 없는곳 * 2. 영희의 시작위치 * 3: 숲속기사의 위치 * 4: 산딸기 위치 * * */ //산딸기 위치 저장 List<Pos> strawberryList = new ArrayList<>(); for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { if (board[i][j] == 4) { strawberryList.add(new Pos(j, i)); } } } for (Pos pos : strawberryList) { //* 2. 영희의 시작위치 int count1 = BFS(pos.y, pos.x, board, 2); //* 3: 숲속기사의 위치 int count2 = BFS(pos.y, pos.x, board, 3); answer = Math.min(count1 + count2, answer); } return answer; } private static int BFS(int y, int x, int[][] board, int posType) { //산딸기 위치들로부터 영희의 최소거리, 기사의 최소거리 BFS 각각 한번씩 돌기 Queue<Pos> queue = new ArrayDeque<>(); //BFS를 위한 queue queue.add(new Pos(x, y)); int[] dx = new int[]{-1, 0, 1, 0}; int[] dy = new int[]{0, -1, 0, 1}; boolean[][] ch = new boolean[board.length][board[0].length]; int day = 0; while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { Pos pos = queue.poll(); //현재위치로부터 if(board[pos.y][pos.x] == posType) return day; for (int j = 0; j < 4; j++) { //동서남북 이동 int moveX = pos.x + dx[j]; int moveY = pos.y + dy[j]; if (moveY < 0 || moveX < 0 || moveX >= board[0].length || moveY >= board.length) continue; if(ch[moveY][moveX]) continue; if (board[moveY][moveX] == 1) continue;//1: 영희가 움직일수 없는곳 ch[moveY][moveX] = true; queue.add(new Pos(moveX, moveY)); } } day++; } return -1; } public static void main(String[] args) { 숲속의기사 T = new 숲속의기사(); System.out.println(T.solution(new int[][]{{4, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 1, 0, 0}, {0, 2, 1, 1, 3, 0, 4, 0}, {0, 0, 0, 4, 1, 1, 1, 0}})); System.out.println(T.solution(new int[][]{{3, 0, 0, 0, 1, 4, 4, 4}, {0, 1, 1, 0, 0, 0, 1, 0}, {0, 1, 4, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 1, 1, 0}, {4, 0, 0, 0, 1, 0, 0, 0}, {4, 1, 0, 0, 1, 0, 0, 0}, {4, 0, 0, 0, 0, 0, 1, 2}})); System.out.println(T.solution(new int[][]{{4, 1, 0, 1, 0}, {0, 1, 0, 1, 0}, {0, 0, 2, 3, 4}, {0, 1, 0, 1, 0}})); } }딸기위치를 기준으로 영희와 숲속의 기사의 최단거리를 각각 따로 BFS로 구하였는데 괜찮은 방법인가요?
-
해결됨파이썬 알고리즘 문제풀이 입문(코딩테스트 대비)
파일 읽는데 이상한 에러 현상
안녕하세요 제 코드로 채점을 받으니 강사님이 제공하신 input.txt 케이스 5개 중, 케이스2 input.txt를 제외하고 나머지 케이스에서 전부 에러가 나옵니다 에러 내용은 Traceback (most recent call last): File "c:\Users\seheo\OneDrive\문서\바탕 화면\코테채점\AA.py", line 11, in <module> tmp = int(input())EOFError: EOF when reading a line인데요아마 파일을 제대로 못 읽는 거 같습니다.(그냥 제공된 txt 파일을 그대로 가져다 파일 이름만 바꿔서 썼습니다.)제 코드는 import sys sys.stdin=open('input.txt','rt') k, n = map(int, input().split()) # print(n, m) arr = [] largest = 0 for i in range(n): tmp = int(input()) arr.append(tmp) largest = max(largest, tmp) # print(arr) # k개 랜선 길이 제각각 # 잘라서 n개의 랜선으로 만들기 # 이때 표준 최대 길이 구하기 # 1. 정렬해서 제일 큰 값의 절반으로 나눈 몫들 더해보기 # 2. 만약 n개가 합이 되면 그것? cnt = 0 lt = 1 rt = largest res = 0 while lt <= rt: mid = (lt+rt)//2 cnt = 0 for i in range(k): cnt += arr[i]//mid if cnt >= n: res = mid lt = mid + 1 else: rt = mid - 1 print(res) 입니다 왜 해당 현상이 나오는 것일까요?
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2-J 질문드립니다.
안녕하세요 선생님!http://boj.kr/6ef33cd0118348bf9e15f38303108e38이렇게 하면 예시로 주어진 입출력 1,2는 맞게 나오는데 결과는 오답으로 나옵니다.어느 부분에서 제가 잘못 생각한 것인지 궁금합니다!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-I_11723_집합
안녕하세요 큰돌님!저는 이 문제에서 입력을 cin으로 받고 그 이후에는 getline으로 받는 방법으로 풀었습니다. cin 뒤에 오는 개행 문자를 제거하기 위해 cin.ignore();를 했지만 50%만 통과하고 틀렸다고 합니다 ㅠㅠ 혹시 입력 받을 때 더 고려해야하는 부분이 있는건가요? 또한 all에서 모든 비트를 켤 때 m=(1<<20)-1;이 아니라 m=(1<<21)-1;로 한건 그냥 범위를 여유롭게 잡으신 건가요?http://boj.kr/040dd72f053a438f833591a06ba882b8
-
해결됨2주만에 통과하는 알고리즘 코딩테스트 (2024년)
코딩 센세 입니다!
이번에 이직 후 회사에서 많은 것을 배우고 밤늦게까지 정리하며 잠드는 날들을 반복하고 있습니다! (외국어의 벽도 느끼고 있습니다 ... 하하 ) 질문해주신 질문들의 답변을 못달아드려서, 강의 수정을 빨리 빨리 못해드려서 정말 죄송합니다 ㅠㅜ... 항상 많은 질문 해주시고 공부해주시는 분들 감사합니다! 바로 답변을 못달아드릴때도 있지만 제 강의 열심히 들으시고 생기시는 궁금증들 질문해주시는 건 정말 정말 기뻐요 😄 제가 바로 답을 못 드리더라도 꼭 답을 드릴테니 간단한 궁금증이나 생각들도 모두 커뮤니티에 꼭 남겨주세요! 항상 많은 힘을 주셔서 감사합니다 😃 !!!!! 오늘도 다들 화이팅이에요!
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-H_2234_성곽
안녕하세요 큰돌님!마지막에 벽 하나를 허물어 최대 영역수를 구하는 부분에서 질문이 있습니다.1. 큰돌님은 ->,↓ 방향으로만 탐색하며 벽을 허무셨지만,저는 처음부터 그렇게 생각하지 못해서 각 칸마다 4방향을 모두 탐색하는 알고리즘( for(int k=0; k<4; k++) )으로 작성하였습니다. 예제코드는 통과하였지만 제출 하면 틀렸다고 뜸니다..어디서 반례가 생기는지 알 수 있을까요?ㅜㅜ 나머지 부분은 다 비슷하게 작성하였습니다. 또한 compSize[2504] 사이즈를 50이 아닌 2500으로 설정하셨는지도 궁금합니다. compSize의 최댓값은 맵의 크기인 n*m=50이 아닌가요? http://boj.kr/3c4e0499d8a740a0a39610f71efd033c
-
미해결자바 코딩테스트 - it 대기업 유제
이렇게 풀어도 되는지 궁금합니다.
import java.util.*; class Node implements Comparable<Node>{ int time; char state; public Node(int time, char state){ this.time = time; this.state = state; } @Override public int compareTo(Node o){ if(this.time == o.time)return this.state - o.state; return this.time - o.time; } } class Solution { public int solution(int[] laser, String[] enter){ int answer = 0; ArrayList<Node> arr = new ArrayList<>(); for(String s:enter){ String t = s.split(" ")[0]; String l = s.split(" ")[1]; int start = Integer.parseInt(t.split(":")[0])*60 + Integer.parseInt(t.split(":")[1]); int end = start + laser[Integer.parseInt(l)]; arr.add(new Node(start, 's')); arr.add(new Node(end, 'e')); } Collections.sort(arr); int cnt = 0; for(Node x:arr){ if(x.state == 's')cnt++; else{ cnt--; answer = Math.max(answer, cnt); } } return answer; } public static void main(String[] args){ Solution T = new Solution(); System.out.println(T.solution(new int[]{30, 20, 25, 15}, new String[]{"10:23 0", "10:40 3", "10:42 2", "10:52 3", "11:10 2"})); System.out.println(T.solution(new int[]{30, 20, 25, 15}, new String[]{"10:23 0", "10:40 3", "10:42 2", "10:52 3", "15:10 0", "15:20 3", "15:22 1", "15:23 0", "15:25 0"})); System.out.println(T.solution(new int[]{30, 20, 25, 15}, new String[]{"10:20 1", "10:40 1", "11:00 1", "11:20 1", "11:40 1"})); System.out.println(T.solution(new int[]{30, 20, 25, 15}, new String[]{"10:20 1", "10:20 1", "10:20 1", "10:20 1", "10:20 1"})); } } 입문강의 결혼식과 비슷한 문제로 생각해 이렇게 짰는데 답은 맞게 나왔습니다. 혹시 반례가 있을까요? 아니면 이 방법도 맞는 방법일까요?
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
풀이입니다.
<html> <head> <meta charset="UTF-8"> <title>출력결과</title> </head> <body> <script> function solution(a, b, c){ let arr = [a,b,c] let sort = arr.sort((a,b) => a-b); return sort[0] + sort[1] <= sort[2] ? "NO" : "YES" } console.log(solution(13,4, 17)); </script> </body> </html>이런식으로 풀어도 괜찮은가요?