안녕하세요 선생님 🙂 맞왜틀에 자꾸 걸리는거 같습니다 ㅠㅠ 테스트케이스도 맞고 생각도 꽤 많이 하고 조건을 체크했다고 생각하는데 자꾸 틀리니 스트레스가 이만저만이 아니네요 ㅠㅠ 이번 아이디어는 누적합을 기반으로 풀이하였습니다. 뺄셈을 하는 대신 나눗셈을 하면 될 것이라 판단하였구요, arr[0]의 값을 1.0으로 설정하였습니다. 또한, 연속된 수의 곱이니 곱연산이 일어나지 않는 경우는 2중 for문에서 j < i - 1로 처리해주었습니다. http://boj.kr/c016e1a3b9d54cb487564acfe350c3d4 앞에서 드리는 질문들도 계속해서 맞왜틀인걸로 미루어보았을 때, 제가 무언가 생각을 잘못하고 있는걸까요?
안녕하세요 선생님 🙂 이번 문제도 테스트케이스는 맞췄는데 틀렸네요 ㅠㅠ 이번 문제는 모르는 부분이 좀 많습니다! high의 값을 입력된 배열의 최소값으로 설정하였습니다. 왜 틀리는걸까요? 테스트케이스에서 파의 길이 중에 가장 짧은 길이는 230입니다. 230보다 긴 파는 있을 수 없다고 판단하여 변수에 값을 저장한 후에 high의 값을 지정하였습니다. Check함수의 조건의 순서에 따라 값이 묘하게 바뀝니다. // main if (Check(mid)) { high = mid - 1; result = mid; } else { low = mid + 1; } bool Check(ll m) { return cnt < C; } 그동안은 위와 같이 조건을 세웠었는데요, 이번 문제는 high와 low의 값을 변경해주는 위치가 바뀌었습니다. 그에 따라 Check함수의 return 조건도 아래와 같이 정반대로 바뀌었습니다. 윗 코드대로 출력을 하면 mid의 값이 176이 나옵니다. 반대로 아래 코드대로 출력하면 mid의 값은 175가 나옵니다. // main if (Check(mid)) { low = mid + 1; result = mid; } else { high = mid - 1; } bool Check(ll m) { return cnt >= C; } 아무리 봐도 두 코드는 같은 코드로 보이는데요, 왜 값이 차이가 나는건지 모르겠습니다. 또, 이번 문제는 왜 아래의 방식을 선택하셨는지도 궁금합니다. 저는 아래의 링크와 같이 Check함수에서 result의 값을 도출하여 출력을 하였습니다. 아무리봐도 문제가 없다고 생각하는데요, 이렇게 풀이하면 왜 틀리는걸까요? http://boj.kr/325f8cd992f24dbbabf49c86a12384f6
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
안녕하세요 방금 전 C# part.1 끝낸 비전공자 학생입니다! 이제 part.2로 넘어가려고 하는데 커뮤니티 글에 C++ 자료구조가 더 상위호환이라고 들어서 혹시 이제 갓 입문한 학생도 C++ 자료구조를 보는게 더 도움이 될까요? C++ 자료구조를 이해하려면 C++ 지식이 필요한건 아닌지 여쭤봅니다!
안녕하세요 선생님 🙂 6-H 문제를 보자마자 6-E 대칭 차집합 문제가 떠올라서 같은 방식으로 풀어봤는데요, 테스트케이스는 맞지만 틀렸다고 나옵니다. 이유가 뭔지 잘 모르겠어서 질문드립니다!! http://boj.kr/0c301b3a0f1546d08e31a6b41e69ea70
안녕하세요 선생님 🙂 한가지 이해가 되지 않는 부분이 있어서 질문 드립니다. result = -1인 경우를 아래와 같이 처리했는데요, if (X <= Y) { cout << "-1" << '\n'; return 0; } X == Y일 경우는 당연히 정답처리가 되긴 하지만.. 혹여나 예외로 Y의 값이 X보다 클 경우를 예외처리하려고 했는데요, 이게 왜 틀렸다고 나오는지 이해가 되지 않습니다. 항상 감사합니다:) http://boj.kr/9feefe6cb25d4acbaef72f01f91a84cb
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 현장강의를 들어야 수업을 따라갈 수 있을것같아요 ㅠ
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 제가 작성한 아래의 코드에서 항상 실제 답보다 1이 작게 나오는데 그 이유를 알 수 있을까요? #include <bits/stdc++.h> using namespace std; int n, m, ny, nx; int dy[] = {-1, 0, 1, 0}; int dx[] = {0, 1, 0, -1}; int mp[51][51]; int dp[51][51]; // 2차원 dp 배열로 수정 // dp[y][x]: 현재 위치에서 최대 몇 번 이동할 수 있는가? int move(int y, int x) { // 이미 계산된 값이 있으면 그 값을 반환 if (dp[y][x] != -1) return dp[y][x]; dp[y][x] = 0; // 이동 불가능한 상태로 설정 (기본값) // 4방향 탐색 for (int i = 0; i < 4; i++) { ny = y + mp[y][x] * dy[i]; nx = x + mp[y][x] * dx[i]; // 오버플로우 처리 및 구멍 처리 if (ny >= n || nx >= m || ny < 0 || nx < 0 || mp[ny][nx] == 0) continue; int ret = move(ny, nx); dp[y][x] = max(dp[y][x], ret + 1); // 현재 위치에서 한 번 이동하고 나서 계산 } return dp[y][x]; } int main() { cin >> n >> m; // 입력 받기 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { char v; cin >> v; if (v == 'H') { mp[i][j] = 0; // 'H'는 구멍이므로 0으로 처리 } else { mp[i][j] = v - '0'; // 숫자는 변환해서 저장 } } } // DP 테이블 초기화 (-1로) memset(dp, -1, sizeof(dp)); // 배열 처리 확인 for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cout << mp[i][j] << " "; cout << dp[i][j] << " "; } cout << "\n"; } // 첫 위치에서 최대 이동 횟수 계산 int result = move(0, 0); cout << result << "\n"; return 0; }
안녕하세요 선생님 🙂 한군데 이해가 가지 않는 부분이 있어서 질문드립니다. 아래의 코드는 Check함수에서 init_attack 변수를 설정하여 attack으로 초기화하도 않았을 뿐더러 아예 사용을 하지 않았습니다. 결론부터 말씀드리면 틀렸는데요, 이게 왜 틀린건지 이해가 되지 않습니다. 혹시 call by value인가요? 입력 값에서 용사의 공격력을 이미 입력받았고, 그 공격력을 포션방을 갔을 때 입력받은 용사의 공격력을 증가시키면 된다고 생각했는데요, 이게 왜 안되는걸까요? http://boj.kr/9ca6118540e54a259b26c070a1b20868
http://boj.kr/c5c442d82b24467fbbac115beed3793c 와 같이 저는 배열 [0][0]~[x-1][y-1]이 아니고 배열을 넉넉하게 잡아 [0][0][0][0][0][0][0] [0] // 사용 ______ _[0] [0] _____________ _[0] [0] _____________ _[0] [0]_____________ _[0] [0]_____________ _[0] [0][0][0][0][0][0][0] 과 같은 형태로 [1][1] ~ [x][y] 까지 활용을 했는데요. 문제가 메모리를 정말 타이트하게 잡지 않는 이상 선생님께서 말씀하신 범위체크하고 위 방법은 취향 차이라고 보면 될까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요! 강의 듣고 변수만 바꿔서 테스트해서 예제는 통과했는데 제출하니까 에러가 발생해서 ㅜㅜ 코드 한번 확인 부탁드립니다. http://boj.kr/052be6c86bf945e5a945a7682b12f2aa
안녕하세요 선생님 🙂 덕분에 이분탐색 문제 관련해서 아주 쉽게 익힐 수 있었던 것 같습니다. 감사합니다 ^^ 아래 링크는 강의를 보기 전에 풀이했던 풀이인데요, 선생님과의 차이점은 cnt를 0으로 초기화했다는 것 딱 하나입니다. 강의에서도 cnt를 1로 초기화한 이유는 어차피 한번은 무조건 뽑고 시작하기 때문이라고 설명해주셨는데요, 부끄럽지만 그 말씀이 어떤 의미인지 이해가 가지 않아 질문 드립니다. 자세히 설명해주시면 정말 감사하겠습니다!! http://boj.kr/b66ec43db9944743b4afe1525f8a161b
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 로컬에서는 동작하는데 제출시 틀리게 나와서 질문드립니다. 혹시 배열의 크기때문일까요? http://boj.kr/021146ee28c946faa187aad995554ebe
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
dynamic_cast는 다운 캐스팅할 때 실행 시간에 타입을 검사하기 때문에 상대적으로 안전하지만 동작 속도가 static_cast보다 상대적으로 느리다고 알고 있습니다. 반대로 static_cast는 다운 캐스팅할 때 사용할 수 있지만, 실행 시간에 타입을 검사하지 않기 때문에 위험하고요. 이에 궁금한 점이 생겨서 다음 질문을 드립니다. 실제 현업에서는 dynamic_cast의 안전성을 포기하고 속도를 향상하기 위해 static_cast로 교체하는 경우가 있나요? 그러한 경우가 있다면, 프로그래머가 실수해서 잘못 캐스팅 경우를 방지하기 위해 어떻게 대응하나요? (수업에서 명시된 열거체으로만 검사하면, 열거체가 수정되거나, 프로그래머가 잘못된 열거체를 지정하는 경우, 문제가 생길 소지가 있어보입니다.)