안녕하세요 큰돌님, for(int j = x1 + 1; j <= x2; j++){ cout << "j:" << j << " x2:" << x2 <<'\n'; _x[j]++; } 해당 코드에서 범위가 j <= x2 마지막 꼭지점이 포함되는 이유를 모르겠습니다. 아래 조건을 준수하려면 마지막 꼭지점은 제외해야 할 것 같은 생각이 들어서요. 단, 수평선 H는 다각형의 어떤 수평선분과도 겹처 놓여서는 안 되고, 유사하게 수직선 V는 다각형의 어떤 수직선분과도 겹쳐 놓여서는 안 된다. 감사합니다! - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
first는 정렬하고 싶은 배열의 첫번째 이터레이터, last는 정렬하고 싶은 배열의 마지막 이터레이터를 넣으면 됩니다. 또한 [first,last) 라는 범위를 갖습니다. 즉, first는 포함하고 last는 포함하지 않는다는 의미입니다. 그렇기 때문에 예를 들어 크기가 5인 a라는 배열 전체를 sort한다고 하면 sort(a[0],a[0] + 5)라고 해야 합니다. 즉, last에 배열의 마지막요소가 아닌 그 “다음”의 위치를 넣어주어야 합니다. 굵게 표시친 부분에서 sort(a,a+5)가 아닐까요??
인강에서 4분 20초 경에 IndexOutOfBoundsException이 발생하기 때문에 다음 코드의 solution 메소드에서 인자로 받는 s 뒤에 " "(공백문자)를 추가해주어야 한다고 말씀하셨는데, s = s + " "; " "(공백문자)를 추가하는 이유가 IndexOutOfBoundsException 발생이 아니라 마지막 문자 개수를 제대로 카운트하기 위함이 아닌지 질문드립니다. 아니면 IndexOutOfBoundsException가 발생할 수도 있나요? 그 이유는 무엇이고, 해당 테스트케이스는 어떤 것인가요? import java.io.*; import java.util.*; public class Main { public String solution(String s) { String answer = ""; s = s + " "; int count = 1; for (int i = 0; i < s.length() - 1; i++) { if (s.charAt(i) == s.charAt(i + 1)) { count++; } else { answer += s.charAt(i); if (count > 1) { answer += String.valueOf(count); } count = 1; } } return answer; } public static void main(String[] args) throws IOException { Main main = new Main(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(main.solution(str)); } }
안녕하세요 선생님, 답지에서 이해가지 않는 부분이 있어 질문을 드립니다. https://www.acmicpc.net/source/share/c2fb354cd24049edb34fbd09a91a38d3 check 함수 및 마지막에 직접 태우는 부분에서 temp = 0으로 초기화해야 올바른 답이 나온다고 생각했는데 temp = m으로 초기화 해야 하는 이유를 확실히 모르겠습니다. 예제 2를 예시로 들어봤을 때 (학생 수 : 7, 놀이기구 수 : 2, 각각 운행시간 : 3 2) temp = 0으로 초기화하고 시작하면 6분이 되었을 때 놀이기구 1은 2명, 놀이기구 2는 3명을 막 완료한 상태이므로 남은 아이들은 2명, 2명을 각각 놀이기구 1, 2에 태워 운행이 끝날 때 까지 기다리면 + 3분으로 9분이 올바른 종료 시간 같은데 아닌 이유가 무엇인가요?
2일째 고민을 해보았는데.. 2%까지만 맞고 틀리다고 합니당..ㅠㅠ 포기하고 싶지 않은 마음에 도움을 요청합니다!! 제가 짠 코드는 이렇습니다! import java.io.*; import java.util.*; // 불이 하나가 아닌 여러개일 수 있다. public class Main { public static int R; public static int C; public static String[][] map; public static int[][] visitedFire; public static int[][] visitedHuman; public static int[] dx; public static int[] dy; public static Node fireLocation; public static Node humanLocation; public static Queue<Node> fireQueue; public static void main(String[] args) throws IOException { // 초기화 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); R = Integer.parseInt(st.nextToken()); C = Integer.parseInt(st.nextToken()); map = new String[R][C]; // 0으로 초기화 visitedFire = new int[R][C]; visitedHuman = new int[R][C]; dx = new int[]{0,1,0,-1}; dy = new int[]{-1,0,1,0}; fireQueue = new LinkedList<>(); // 맵 입력 for (int i = 0; i < R; i++) { String S = br.readLine(); for (int j = 0; j < C; j++) { // 불 좌표, 지훈이 좌표 찾기 map[i][j] = String.valueOf(S.charAt(j)); if(map[i][j].equals("J")){ humanLocation = new Node(j,i); map[i][j] = "."; // .으로 변경 }else if(map[i][j].equals("F")){ // 불이 여러개, 불이 아무것도 없을 수 있다. -> 반레 fireLocation = new Node(j,i); fireQueue.add(fireLocation); visitedFire[i][j] = 1; } } } // (1) 불이 이동할 수 있는 최단경로 fireBfs(); // (2) 사람이 이동할 수 있는 최단경로 + 길 비교해야함 humanBfs(humanLocation.y, humanLocation.x); // 가능한 길 찾아서 int result = Integer.MAX_VALUE; // (3) 가장 짧은 최단거리 찾기 (가장자리 찾기) for (int i = 0; i < visitedHuman.length; i++) { for (int j = 0; j < visitedHuman[i].length; j++) { if((0<i && i<R-1) && 0 < j && j < C-1)continue; // 가장자리가 아닌 경우 pass if(visitedHuman[i][j] > 0) { result = Math.min(result, visitedHuman[i][j]); } } } if(result == Integer.MAX_VALUE){ System.out.println("IMPOSSIBLE"); }else{ System.out.println(result); } } public static void humanBfs(int y, int x){ // tkfk visitedHuman[y][x] = 1; Node node = new Node(x,y); Queue<Node> queue = new LinkedList<>(); queue.add(node); while(queue.size()>0){ Node cur = queue.poll(); for (int i = 0; i < 4; i++) { int nx = cur.x + dx[i]; int ny = cur.y + dy[i]; if(nx < 0 || nx >= C || ny < 0 || ny >= R) continue; if(visitedHuman[ny][nx] == 0 && (map[ny][nx].equals("."))){ if(visitedHuman[ny][nx] < visitedFire[ny][nx] || visitedFire[ny][nx] == 0){ visitedHuman[ny][nx] = visitedHuman[cur.y][cur.x] + 1; Node next = new Node(nx,ny); queue.add(next); } } } } } public static void fireBfs(){ while(fireQueue.size()>0){ Node cur = fireQueue.poll(); for (int i = 0; i < 4; i++) { // 4방향 탐지 int nx = cur.x + dx[i]; int ny = cur.y + dy[i]; if(nx < 0 || nx >= C || ny < 0 || ny >= R) continue; if(visitedFire[ny][nx] == 0 && (map[ny][nx].equals("."))){ visitedFire[ny][nx] = visitedFire[cur.y][cur.x] + 1; // 이동함을 표현 Node next = new Node(nx,ny); fireQueue.add(next); } } } } public static class Node { int x; int y; Node(int x, int y){ this.x = x; this.y = y; } } }
안녕하십니까 큰돌님 Q. 3 * 3 맵을 입력받아야 함. 이 맵은 1과 0으로 이루어져있고 {0, 0}은 무조건 1임을 보장한다. {0, 0}부터 4방향을 기준으로 한칸씩 탐색해나가며 방문한 정점은 다시 방문하지 않으며 방문하는 좌표를 출력하는 코드. 0은 갈 수 없는 지역. 1은 갈 수 있는 지역을 구현하시오. 1. 문제의 뜻이 {0, 0}을 기준으로 4방향으로 탐색하는데 다 0이면 그 다음 칸인 {0, 1}로 이동하는데 0이니까 그 다음 칸인 {0, 2}를 기준으로 4방향을 탐색하는데 밑에 1이 있으니까 {1, 2}를 기준으로 또 4방향으로 탐색하고~, 이렇게 하라는 뜻이 아닌 거죠 ?? 저는 0 : 0 1 : 0 0 : 2 1 : 2 2 : 2 2 : 1 이렇게 출력되게 해야하는 줄 알았는데 위 문제의 답 코드를 실행시키면 0 : 0 1 : 0 이렇게 나와서 제가 이해력이 안 좋아서 질문드립니다 ㅎ dfs까지 추가로 강의를 들었는데 위 퀴즈의 go 함수 로직이 사실 dfs 로직인 건가요 ?? 종화는 방구쟁이야! 문제의 dfs 로직과 위 퀴즈의 go 함수 로직과 거의 유사해보여서요 ) 트리 순회의 조건문 visited[here] == 0 안의 로직에서 중위 순회에서만 else-if 문을 사용하는데 http://boj.kr/9ed45ee550c0492081f5cbd187a7c71d 이런식으로 전위, 후위에서도 자식 노드가 한 개 아니면 두 개 둘 중에 하나니까 두 번 if문 볼 필요없게 else-if문 사용해도 되는거죠 ??
function solution(str = '') { return str .match(/(.)\1*/g) .map((word) => word.charAt(0) + (word.length > 1 ? word.length.toString() : '')) .join('') } let str1 = 'KKHSSSSSSSE' console.log(solution(str1)) 정규식 사용해서 풀이해보았습니다. 이상 없을까요? 그리고 문자열 강의를 대부분 보았는데 정규식은 따로 다루시는 것 같지 않아서 조금 아쉽습니다. 나중에라도 강사님께서 정규식에 대해 소개해주시면 어떨까 해서 글 남겨 봅니다. 강사님께서는 현업에도 종사하시고, 수강생들보다 문제풀이 경험이 많으실테니 어떤 정규식들을 많이 보셨는지 궁금합니다.
#include <bits/stdc++.h> using namespace std; int n, m, y, x, toX, toY, nx, ny; int arr[104][104]; int visited[104][104]; queue<pair<int,int>> q; int dx[4] = {0,1,0,-1}; int dy[4] = {-1,0,1,0}; int main() { cin.tie(NULL); cout.tie(NULL); cin >> n >> m; cin >> x >> y; cin >> toX >> toY; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> arr[i][j]; } } visited[x][y] = 1; q.push({x, y}); while (q.size()) { tie(x, y) = q.front(); cout << x << y << "\n"; q.pop(); for (int i = 0; i < 4; i++) { nx = x + dx[i]; ny = y + dy[i]; if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue; if (arr[nx][ny] == 1 && !visited[nx][ny]) { visited[nx][ny] = visited[x][y] +1; q.push({nx,ny}); } } } printf("%d\n", visited[toX][toY]); cout << visited[toX,toY]; return 0; } 안녕하세요 printf로 출력을 했을때는 9가 잘 뜨는데 왜 cout을 하면 주소값(0x415fc0)이 뜨는지 이유를 알 수 있을까요?
알고리즘공부를 어느정도는 예전에 해본 수강생입니다 다만 c++에대한 기본지식이 선생님이 올려주신 교안을 살펴보니 모자른점이 있어 교안을 보면서 공부를 해보고있습니다. 딱 백준기준으로 골드초입정도인 dfs/bfs같은 문제까진 계속 풀어오긴했는데 비트마스킹이나 정규식 문자열파싱등 제게 모자르던 기초부분이있다는걸 교안을통해 배우게되어 좋습니다 선생님강의의 1주차부터 본격적인 알고리즘 강의내용이 들어가는듯 한데 교안을 전부다 끝내고 수업을 듣는게 맞을까요? 아니면 같이병행하는게맞을까요?
풀이에서 배열을 1부터 N까지 반복문을 돌며 현재 인덱스 값으로 초기화하는데 1은 소수가 아니므로 2부터 N까지 반복문을 돌거나, 반복문이후에 A[1] = 0; 으로 초기화해야합니다. 왜냐하면 문제의 입력 조건 범위가 1이상 1,000,000이하 이므로 M의 값이 1로 들어올 수 있기 때문입니다.
https://www.acmicpc.net/board/view/121782 DFS 알고리즘을 사용했고, 높이 값들을 추출한 다음에 일일이 비교하면서 문제에서 주어진 조건대로 구현했습니다. 높이에 따른 각 케이스마다 물에 잠기지 않은 영역의 수를 v_cnt 벡터에 저장하고 그 중 최댓값을 찾아서 출력하도록 했습니다. 문제에서 주어진 예시대로 입력하면 잘 출력되는데 틀렸다고 뜹니다. 어디가 잘못된 걸까요?ㅠ
http://boj.kr/13cd857dcaae4b858119dc6057a36655 DFS를 이용해서 풀었습니다. 전체적인 로직은 큰돌님이 보여주신 코드랑 다를 바 없는 것 같은데 cnt (큰돌님 코드에서는 ret) 값이 고정 1로 나옵니다. 아무리 봐도 어디가 잘못된건지 모르겠습니다..
안녕하십니까 큰돌님 강의 보기 전에 문제를 풀어봤는데 틀렸다고 나와서 질문드립니다. 최대 범위인 20억 * 20억일 때 long long 범위가 넘는데 pow 반환값을 long long 에 저장해서 틀린게 맞을까요 ?? 그리고 pow함수의 시간복잡도는 어떻게 되는지도 궁금합니다 http://boj.kr/c90ff8da35d3490b859f8ee922c59bf9
큰돌님 안녕하세요! gcc 설치 후 vscode에 설정하는 중 일부 에러가 발생하여 질문 드립니다. 현재 homebrew를 통해 gcc 설치 후 해당경로로 헤더파일을 만들어놓은 상태입니다. 그 후, vscode a.cpp 파일의 터미널에 g++ -std=c++14 -Wall a.cpp -o test.out 를 입력하였을 때, 에러가 발생합니다. 어떻게 수정해야할까요...