묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
조합 함수의 인자인 벡터에 &을 붙이지 않아도 괜찮나요?
안녕하세요 큰돌님, 친구와 이야기하다가 궁금한 것이 생겨 질문 남깁니다. 영상에서 combi의 인자로 vector<int> b를 두셨는데, vector<int> &b로 하지 않아도 문제는 없을까요? 큰돌님 풀이가 익히기 쉬워 그렇게 하고 싶은데 메모리문제가 생길 수 있다고 이야기를 들어서요.
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
회의실 배정 문제조건
문제조건에 동시간대에 진행되는 회의는 없다는 전제가 따로 없어서 혼동스러웠는데요..그런 케이스는 없는 경우에만 강의 풀이가 적용되는게 맞을까요? 31 31 11 1 이런경우 반례이지 않나 싶습니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
[질문]: [섹션4] -> [2중 연결 리스트로 전환] -> [21:30]
강의 잘 보고있습니다! 선생님. 다름이 아니라 ReleaseList()함수에서 어차피 이제 pTmp는 NULL인 상황을 고려할 필요가 없을텐데(테일 노드 역시 동적 할당이 아니므로), 조건식에 NULL을 고려하는 코드가 있어서 의문입니다. 제가 또 다른 경우의 수를 자각하고 있지 못하는 걸까요? 아니면 그냥 혹시나 NULL일 상황을 대비해서 남겨두신 코드인가요?이런식으로 조건식을 바꾸더라도 프로그램은 정상 구동됩니다.
-
미해결김영한의 실전 자바 - 중급 2편
섹션4 강의 문의 입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강사님 강의 항상 잘 보고있습니다 🙂이번 강의에서 ArrayList 클래스를 직접 사용하지 않고, 별도로 클래스를 구현하여 기능을 설명해 주셨는데요.이전 강의에서는 직접 구현한 뒤 해당 클래스를 함께 활용하셨던 것으로 기억하는데,이번에는 ArrayList를 전혀 사용하지 않고 직접 구현만 하신 점이 궁금해서 문의드립니다.혹시 ArrayList를 사용하지 않아도 충분히 개념을 설명할 수 있어서 그렇게 진행하신 걸까요?아니면 별도로 구현하는 것이 ArrayList의 내부 구조를 더 잘 이해하는 데 도움이 되기 때문일까요? 강의 정말 유익하게 보고 있으며, 많은 걸 배워가고 있습니다!제 질문이 혹시 의도를 제대로 파악하지 못한 것이라면 너그럽게 이해해 주시면 감사하겠습니다. 😊
-
미해결김영한의 실전 자바 - 중급 2편
배열에 제네릭 타입을 사용하지 못하는 이유에 대한 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 1. 제네릭은 생성자를 통해 인스턴스를 생성하는 시점에 타입이 결정된다. 2. 코드로 타입 인자가 전달되면 자바 컴파일러는 제네릭 정보를 이용해서 해당 타입을 이해한다. 3. 자바 이레이져에 의해 컴파일 후 제네릭 정보가 사라진다 => 상한인 Object로 변경됨제네릭 적용이 이런식으로 진행된다고 이해를 했습니다.그러면 배열에 타입 인자를 적용하더라도 결국 상한인 Object로 변경되어서 코드가 돌아가지 않나요?private E[] elementData; public MyArrayListV4() { elementData = new E[DEFAULT_CAPACITY]; }자바가 E를 알 수 없어서 사용 불가능하다는 부분이 이해가 잘 안됩니다... 제가 어떤 부분을 놓치고 있는 걸까요?
-
미해결자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
컴파일 에러 문의
안녕하세요 강사님!채점 컴파일 에러 관련해서 문의 드립니다. 저는 위와 같이 풀이를 하였는데요! 채점 시에 컴파일 에러가 발생하는데 어느 부분 때문일까요,,?제 컴퓨터에선 올바르게 작동합니다!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
교안 2차원 배열 90도 회전 관련 질문
#include <bits/stdc++.h> using namespace std; const int n = 3; const int m = 4; void rotate_left_90(vector<vector<int>> &key){ int n = key.size(); int m = key[0].size(); vector<vector<int>> temp(m, vector<int>(n,0)); for(int i = 0; i<m; i++){ for(int j = 0; j<n; j++){ temp[i][j] = key[j][m-i-1]; } } //key.resize(m); -> @@@@@@@ //key[0].resize(n); -> @@@@@@ key = temp; return; } int main(){ vector<vector<int>> a = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, }; rotate_left_90(a); for(int i = 0; i<m; i++){ for(int j = 0; j < n; j++){ cout << a[i][j] << " "; } cout << '\n'; } return 0; }안녕하세요 큰돌님 덕분에 코테준비에 힘을 얻는중입니다. 다름이 아니라 c++교안을 쭉 정독하며 이해하려 하고 있는중에, 의문점이 생겨 질문드립니다. 위 코드는 교안에 있는 rotate_left_90()을 적용한 코드입니다.첫번째는, key.resize()에 대한 의문입니다. 구글링을 해보니 벡터는 '='로 대입하면 깊은복사가 일어난다고 합니다... 주석으로 없애고 실행해도... 깊은복사가 일어나는 것 같습니다... 그렇다면 지금 매개변수를 &key로 참조에 의한 호출로 받아 메인함수 벡터 a의 값을 변경중인데, 깊은복사가 일어나면 아예 새로운 벡터를 할당하는 것이니 형식만 맞다면 사이즈 조정을 할 필요 없지 않나요? 실제로 주석을 달아서 실행해도 값이 같게 나와서 사이즈 조정의 필요성과 제 지식이 맞는지 헷갈려 질문드립니다.두번째는, key[0].resize(n) 부분입니다. 사이즈 조정이 필요한 상황이라고 한다면 해당 코드는 key의 첫번째요소(벡터)만 사이즈 초기화를 해주고 있는 상황이 아닌가요?? 이렇게 된다면 나머지 요소(벡터)에 해당하는 길이들은 초기화 되지 않는게 아닌가요?? 출력에는 문제가 없어서... 저렇게 첫번째 요소의 길이만 수정해도 나머지 요소(벡터)들의 길이도 수정되는건지 궁금합니다 -> 아 이 부분은 해결했습니다...! 첫번째 요소가 벡터의 높이가 되는 느낌인거군요...?
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
강의 내용 중 백트래킹 존재 여부
안녕하세요.실제로 코딩테스트는 자바로 준비하고 있으나, 강의에서 문제해결력을 학습하고 싶어서 강의를 수강하게 된 코테 입문자입니다.강의를 처음부터 듣지 않고 , 목차에 따라 필요한 내용을 듣고 있는 와중에 궁금증이 생겨 질문을 남깁니다.강의 내역 중 백트래킹에 관한 제목이 없는데, 강의에서는 다루지 않는건가요?
-
미해결김영한의 실전 자바 - 중급 2편
현재 자바가 정렬 알고리즘을 사용하는 기준 질문입니다
현재 자바는 데이터가 작을 때(32개 이하) 듀얼 피벗 퀵소트를 사용하고, 32개를 초과할 때 팀 소트를 사용한다고 말씀하셨는데,데이터 개수로 정렬 알고리즘이 정해지는게 아니라 데이터 타입으로 정해지는거 아닌가요?
-
해결됨김영한의 실전 자바 - 중급 2편
[리뷰] 잘 들었습니다!
40% 정도 들었을 때 리뷰를 이미 남겨버려서 이후에 추가로 남길 수는 없는 것 같아서 아쉬운대로 여기에라도 남깁니다.개발자의 길을 걷기로 정한 지 얼마 지나지 않았을 때, 파이썬이나 C 등을 배우고 나서 항상 아쉬웠던 부분이 "이 다음 스텝을 밟으려면 뭘 해야 되는 거지?"라는 막막함에 쉽사리 다음 스텝으로 가지 못하고, 그대로 다른 개념들을 배우러 가게 되어서 어느정도 배웠던 개념들이 꽤나 많이 사라져 버리는 경험을 했을 때입니다(ex. 파이썬 기초 책을 완독하고, 다음에 중급 단계를 배우고 싶은데, 뭘 선택해야 하지?).그런데 영한님은 정말 탄탄하게 로드맵을 정해 주셔서 "내가 한번 배운 기초 지식이 무의미하게 희석되지 않겠구나, 결국 다음 강의에 도움이 되는구나"하는 믿음을 가진 채로 듣다 보니 열정도 더 생깁니다.마지막 카드 게임 문제를 풀고난 뒤에 영한님의 풀이와 비교했을 때도 너무 재미있었습니다. "이렇게 해야 더 객체지향적이구나", "ENUM을 여기서 사용할 수가 있구나" 등등 내 코드보다 더 개선된 코드를 보면 그 수준까지 도달하고 싶은 열망에 더욱 공부 의욕도 샘솟네요.이제 저는 미리 결제해 둔 고급1편과 스프링 입문을 병행하며 듣고, 그 뒤로는 아마 고급 2편과 스프링 로드맵을 따라가지 않을까 싶습니다. 또한 나온 지 1년도 채 되지 않은 강의들이라 그런지 고급 자바편의 리뷰 수가 상대적으로 적은 것을 보면 뭔가 제 마음도 아프고, "영한님이 적은 리뷰 수에 의욕이 저하되면 안 될텐데"하는 생각이 들기도 합니다.그 덕분(?)인지 "아 나는 꼭 고급편 듣고 리뷰를 야무지게 남겨야지"라는 저만의 목표가 생기기도 하네요.저는 비록 학생에 불과하지만, 본인이 충분히 알고 있는 개념이라고 하더라도 그것들을 체계적이고, 오류없이 누군가에게 전달하려고 한다면 강의시간의 수 배만큼의 시간과 노력이 필요함을 잘 알고 있습니다.저도 가끔 무언가를 남에게 가르쳐주려고 할 때 초반에는 정말 탄탄한 순서와 검증된 자료들만으로 준비하면서 계획을 세우다가, 어느 순간 그 과정이 너무 힘들어서 헤이해지는 경우가 참 많았거든요.결국 하고 싶은 말은 스프링에 이어 그 기초가 되는 자바까지 이렇게 탄탄하게 준비해 주시니 그걸 듣는 저로써는 너무나 감사할 따름입니다. 영한님의 덕을 너무나도 잘 보고 있는 인간 1명이 있다는 사실에 조금이나마 강의 준비하시는 데에 도움이 되셨으면 합니다. 파이팅!
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
7-G 2294번 재귀 풀이 관련하여 질문드립니다.
제가 이해한 방식이 맞는지 확인받고자 질문드립니다! 혹시 이해에 잘못된 부분이 있다면 알려주시면 감사하겠습니다 ㅎㅎ우선 제 재귀 풀이는 다음과 같습니다. 풀이 1. 재귀 내부에서, 전체 코인에 대한 반복문을 돈다(vis배열 사용X)https://www.acmicpc.net/source/89158559풀이 2. 재귀 내부에서, 중복 조합을 뽑듯이 이전에 사용한 코인을 시작점으로 하여 코인에 대한 반복문을 돈다(vis배열 사용O)https://www.acmicpc.net/source/89531232 그리고 제가 헷갈렸던 부분과 그에 대해 스스로 이해한 내용은 다음과 같습니다! Q. 재귀로 풀 때에 dp의 상태값으로 sum이 충분한 이유A. sum은 어떤 코인을 사용하느냐에 따라 무작위로 호출되지만, 매개변수에 sum을 포함하며 함수를 매개변수가 k가 될 때까지 전진해나가며 그 sum에 대해 가능한 모든 작은 부분에 대한 재귀(제 코드 로직상 sum+1 부터 k 를 만드는 가능한 재귀)가 호출되기 때문에 다른 상태값이 아닌 sum 하나로 dp를 처리할 수 있는것이다.다만, dp의 개념 상 자신보다 작은 부분합에 대한 함수를 호출하는 것이 더 직관적으로 와닿기 때문에, 함수를 호출할때 매개변수를 0으로 호출하는 것 보다 k 로 호출하는 것이 논리와 잘 맞는다.( 현재 sum을 만들 때 필요한 최소 동전개수를 받아와서 sum에서 사용한다고 직관적인 이해 가능.https://www.acmicpc.net/source/89531844이 풀이처럼 풀이1 의 코드에서 함수 호출과 기저조건을 반대로 바꾼 것을 의미함) Q. vis배열을 사용하지 않는것과 사용하는 것이 둘 다 맞다고 통과되는 이유는?A. vis 배열을 사용하지 않으면 말그대로 중복 순열을 구하는 것 같이 보이지만 사실 개수가 아닌 sum을 기준(기저조건)으로 함수를 return해주고 있기때문에, 코인을 넣는 순서에 따라 (큰 코인을 먼저 사용하면 필요한 코인 개수가 더 줄어들 수 있음) 사실 조합의 관점으로 봐도 다른 조합이 만들어진다. (순서만 바뀐 같은 조합이 만들어지는 경우도 있긴 하다)vis 배열을 사용하면 위에서 "순서만 바뀐 같은 조합이 만들어지는 경우" 를 제외시키고 (ex.112 211과 같은 경우) 서로 다른 중복조합을 만드는 것이기 때문에 vis배열을 사용하지 않는 것 보다 조금 더 효율적이다.그치만 결과는 둘다 같게 나온다. 이렇게 2개의 질문에 대해 제가 이해한 내용이 맞을까요? 감사합니다!
-
해결됨세계 대회 진출자가 알려주는 코딩테스트 A to Z (with Python)
제가 공부하는 방법이 괜찮은지 궁금합니다
안녕하세요, 강의를 듣고 계신 여러분!여러분의 학습을 돕기 위해 질문 안내를 드리고자 합니다. 1. chatGPT를 이용해보기단순한 의문은 chatGPT를 이용해도 해답을 찾을 수 있는 경우가 종종 있습니다! 2. 강의의 어떤 부분에 대한 질문이고, 어떤 부분이 궁금한지 명확히 알려주세요!강의의 어느 파트에서 의문을 느끼고, 어떤 부분이 궁금한지를 명확히 제시해 주시면 답변에 도움이 됩니다!자신은 어떻게 이해했는지 또한 적어주면 좋습니다! ex) 섹션5의 '그래프 순회 (DFS & BFS) [개념]' 강의에서 DFS와 BFS 모두 그래프의 모든 노드를 탐색하는 알고리즘이라고 하셨고 시간 복잡도 또한 똑같다고 이해했습니다. 그러면 DFS와 BFS 중에서 어떤 알고리즘이 더 효율적인지 구별하는 것은 의미가 없는 것일까요? 어느 파트섹션 2 재귀함수 이해하기 문제 풀이 백준 4779 칸토어 집합자신은 어떻게 이해했는지먼저 칸토어 집합의 원리? 구성을 이해해 보려함 이후 이것을 수식으로 바꿔 보고 그것을 재귀함수 형태로 바꿔 보려 함강사님께서 풀어 보고 오라고 하셨는데, 일단 시도는 하였으나 설계 자체가 잘 되지 않고, 챗 gpt에서 제 코드에서 설계나 풀이의 문제가 뭐냐고 물어봤는데 아예 접근부터 잘못되었다고 생각됨어떤 부분이 궁금한지 원래 자바로 공부하다가 파이썬이 코테에 유리하다는 것을 느끼고 바꿨더니 문법 문제가 생김문제를 풀 때 그때그때 문법 검색해 보고 블로그에 정리하는 식으로 공부할지 or 그냥 파이썬 문법 강의까지만 듣고 올지실버 문제가 아직 설계부터 어렵고, 수학 문제가 나오면 어버버거리는데, 이걸 문제를 다 못 풀어 봤어도 혼자 30분 정도 접근해 보고, gpt에 물어봐서 나의 문제점을 이해하고 문제 풀이 강의를 듣는 식으로 해도 되는 건지? 브론즈 같은 경우엔 일단 풀이가 깔끔하지 않더라도, 문제가 풀려서 풀고 강의를 들으면 됐었는데, 실버 문제로 오니까 아예 설계부터 못하는 것 같아서 공부를 어떻게 해야 하는 건지 모르겠음
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
2 - S, 맞왜틀
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. https://www.acmicpc.net/source/89525813
-
해결됨자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
다른 질문과 답변을 보고 질문드립니다.
https://www.inflearn.com/courses/lecture?courseId=326750&unitId=72711&tab=QnA&category=questionDetail&q=229953 저도 이 글처럼 lt와 rt로도 풀었었는데,이 코드가 reverse()를 사용하는 것보다 효율적이라 하셨는데 어떤 면에서 효율적인지 궁금합니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
인덱스정렬 강의, 04_ListAndIndex질문드립니다.
안녕하세요 강사님인덱스정렬 강의 예제에서 RecalcListCount()라는 함수에 대해 질문드립니다.unsigned int RecalcListCount(void) { unsigned int cnt = 0; USERDATA* pTmp = g_HeadNode.pNext; while (pTmp != &g_TailNode) { ++cnt; pTmp = pTmp->pNext; } return g_listCount; }이 코드에서 cnt로 추가된 자료의 수는 세었지만 이것이 전역 스태틱 변수 g_listCount에 저장되지 않는 거 같는데 이렇게 되어 있는 것이 맞는 것인지 질문드립니다.
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-C 인구이동 코드 질문입니다!
안녕하세요! 큰돌님!bfs로 visited 배열에 저장하는 값을 바꿔가면서 연합 체크 후 갱신하는 방법으로 풀이해보았습니다.주어진 테스트 케이스는 잘 나오는데 채점에서 계속 틀립니다.고민해보았지만 잘 해결되지 않아 질문 남깁니다!새해 복 많이 받으세요! :)https://www.acmicpc.net/source/89455017
-
해결됨38군데 합격 비법, 2025 코딩테스트 필수 알고리즘
1-7. 4:30 에서 N*N이 아닌이유가 뭔가요?
1-7. 4:30 에서 N*N이 아닌이유가 뭔가요? 갑자기 26을 상수취급하는 이유를 모르겠어요.. 1-6에서는 N*N이었던 것 같은데요... 1. 현재 학습 진도몇 챕터/몇 강을 수강 중이신가요?어떤 알고리즘을 학습하고 계신가요?여기까지 이해하신 내용은 무엇인가요? 2. 어려움을 겪는 부분어느 부분에서 막히셨나요?코드의 어떤 로직이 이해가 안 되시나요?어떤 개념이 헷갈리시나요? 3. 시도해보신 내용문제 해결을 위해 어떤 시도를 해보셨나요?에러가 발생했다면 어떤 에러인가요?현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다! 😊
-
미해결자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)
강의에 대해 질문있습니다.
안녕하세요 프론트엔드 개발자로 취업을 준비중입니다. 코딩테스트가 어렵고 또 이 부분에서 자주 떨어져서 강의를 찾다가 결제를 하게 되었는데요 우선 2021년도 Best라고 되어있는데 지금 봐도 무방할까요?
-
해결됨10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
1-H 시간초과 질문
http://boj.kr/e286a9db4cc4444a80c4d6731bb84466이 문제의 경우 4가지 단계로 나눠서 풀었습니다입력받을 숫자의갯수와 며칠 연속으로 받을지 정하는 수를 입력 받기입력 받을 숫자만큼 숫자 받기입력한 수가 3이라면 1~3, 2~4 이러한 방식으로 온도의 합 구하기내림차순으로 정렬 후 첫번째 요소 반환 (최댓값 반환) 위와 단계로 풀어보니 시간 초과가 발생했습니다. 어떻게 시간복잡도를 최적화 할지 감이 잘 안와서 질문 드립니다! 제가 최근에 알고리즘 공부를 시작해서 아직 시간복잡도 줄이기, 출력초과, 런타임에러 같은 오류에 익숙하지 않습니다. 이러한 오류를 검출하는 방법에는 어떤 것이 궁금합니다 그리고 실버 3까지는 풀 수 있는 문제가 많은데 실버 2로 올라가는 순간 도식화까지는 가능한데 이 도식화 한 것을 어떻게 코드로 표현해 풀 수 있는지 감이 안 잡히는 문제들이 많습니다. 이런 문제를 만나면 보통 정답 코드를 보는 편인데 큰돌님 강의 외에는 해설이 없다보니 어떻게 공부해야할지 잘 모르겠습니다ㅠㅠ 이 부분도 어떻게 공부하면 좋을까요??
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
3-K 질문드립니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.while 한번마다 이중반복문으로 bfs 시작점을 찾았기 때문에 시간초과가 난다고 생각했습니다. 그런데 어느정도로 시간이 걸리는지 특정하지 못하겠습니다. 이중반복문이어도 x가 있을 때 바로 go를 실행하니 O(NM)이라 할 수 있나요? 시간복잡도 측면에서 어떻게 되는지 자세하게 설명 부탁드립니다 ㅜㅜ #include <iostream> #include <vector> #include <queue> using namespace std; int N, M; vector<vector<char>> graph; vector<vector<bool>> visited; vector<pair<int, int>> ice; bool ok = false; int x1, y1, x2, y2; int cnt = 0; int dx[4] = {0, 0, -1, 1}; int dy[4] = {1, -1, 0, 0}; void reachable(int x, int y) { queue<pair<int, int>> q; vector<vector<bool>> check(N, vector<bool>(M, false)); check[x][y] = true; q.push({x, y}); while (!q.empty()) { auto [cx, cy] = q.front(); q.pop(); for (int i = 0; i < 4; i++) { int nx = cx + dx[i]; int ny = cy + dy[i]; if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue; if (check[nx][ny]) continue; if (graph[nx][ny] == 'L') { ok = true; return; // 다른 백조를 찾으면 즉시 반환 } if (graph[nx][ny] != 'X') { q.push({nx, ny}); check[nx][ny] = true; } } } } void go(int x, int y) { if (graph[x][y] == 'X') { ice.push_back({x, y}); return; } visited[x][y] = true; for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue; if (visited[nx][ny]) continue; go(nx, ny); } } int main() { cin >> N >> M; graph.assign(N, vector<char>(M)); visited.assign(N, vector<bool>(M, false)); int l_count = 0; for (int i = 0; i < N; i++) { string s; cin >> s; for (int j = 0; j < M; j++) { graph[i][j] = s[j]; if (graph[i][j] == 'L') { if (l_count == 0) { x1 = i; y1 = j; l_count++; } else { x2 = i; y2 = j; } } } } int ret = 0; while (true) { reachable(x1, y1); if (ok) break; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { if (!visited[i][j] && graph[i][j] != 'X') { cnt++; go(i, j); } } } // 빙판 녹이기 for (const auto& pos : ice) { graph[pos.first][pos.second] = '.'; } ice.clear(); ret++; } cout << ret << endl; cout << cnt << endl; return 0; }