dingcodingco
@dingcodingco
Students
14,991
Reviews
1,561
Course Rating
4.9
Posts
Q&A
프로그래머스에서 제출 후 채점시 틀림ㅠ
안녕하세요 giving0414 님! 저도 확인해보니 실패해서, 이유를 분석해보니 테스트 케이스가 이상한게 추가된 것 같습니다!문제 지문에 B#/E#이 명시되지 않았는데 테스트 케이스가 추가되었습니다. 따라서 아래로 변경하시고 제출하니까 통과가 됩니다def replace_step(m): return m.replace('C#', 'c').replace('D#', 'd').replace('F#', 'f').replace('G#', 'g').replace('A#', 'a').replace('B#', 'b').replace('E#', 'e') 교재에도 업데이트해두겠습니다 제보해주셔서 감사합니다좋은 하루 보내세요! ㅎㅎ
- 0
- 2
- 67
Q&A
혹시 강사님은 lovable, replit모두 유료 쓰시는가요?
패시브님 좋은 질문 감사합니다!저의 경우 강의를 위해 둘다 20$ 짜리 플랜을 구매해서 사용했습니다크레딧 소모가 빠르다는 점, 충분히 공감합니다. 실제로 이 부분이 Lovable이나 Replit 같은 웹 기반 도구의 가장 큰 단점이기도 합니다.그래서 이 문제가 바로 2주차에서 Cursor로 넘어가는 핵심 이유이기도 합니다. 교재에서도 다루고 있는 내용인데, 비용 구조를 한번 비교해보면 이렇습니다.Lovable은 무료 플랜이 월 10크레딧이고, 메시지 하나 보낼 때마다 크레딧 1개가 빠집니다. 프롬프트 한 번에 70% 날아가셨다면 사실상 2~3번 대화하면 끝나는 구조예요. Pro 플랜도 월 $25에 100크레딧이라 넉넉하진 않습니다.반면 Cursor Pro는 월 $20인데, 빠른 요청 500회에 느린 요청은 무제한입니다. 느린 요청이 5~60초 정도 기다리는 거라 좀 느릴 수 있지만, 크레딧이 소진되어 완전히 막혀버리는 것과는 차원이 다릅니다.그래서 1주차에서는 Lovable/Replit으로 "이런 게 가능하구나"를 체험하시는 데 집중하시고, 크레딧을 아끼시려면 요청을 한 번에 묶어서 보내시는 걸 추천드립니다 1주차 무료 크레딧으로 감 잡으시고, 2주차부터 Cursor로 넘어가시면 비용 걱정 없이 훨씬 자유롭게 개발하실 수 있으니까 너무 조급해하지 않으셔도 됩니다. 지금 단계에서 크레딧 아깝다고 시도를 안 하시는 것보다는, 한 번이라도 직접 만들어보는 경험이 훨씬 중요하니까요. 좋은 하루 되시길 바랍니다!
- 0
- 2
- 61
Q&A
33. 4-5 iOS 파이어베이스 메시징 문의입니다.
안녕하세요 징징님! 좋은 질문해주셔서 감사합니다 안드로이드에서는 되는데 iOS에서만 안 되니까 당황스러우셨을 텐데, 이건 애플의 보안 정책 때문에 생기는 차이입니다. 커서가 알려준 방법이 맞습니다. iOS에서 푸시 알림을 받으려면 APNs(Apple Push Notification service)라는 애플의 푸시 알림 시스템을 반드시 거쳐야 합니다. 안드로이드는 Firebase에서 바로 알림을 보낼 수 있지만, iOS는 애플이 "우리 APNs를 통해서만 알림을 보내라"고 정해놓은 거예요. 그래서 Firebase 콘솔에 APNs 인증키를 등록해줘야 Firebase가 애플한테 "이 앱에 알림 보내도 돼"라고 인증을 받을 수 있습니다.그리고 Apple 개발자 계정 가입이 필요한지에 대해서도 맞습니다. APNs 인증키를 발급받으려면 Apple Developer Program(연 $99, 약 13만원 정도)에 가입이 되어 있어야 합니다. 이건 APNs 인증키뿐만 아니라 나중에 앱스토어에 앱을 출시할 때도 필요하기 때문에, 4주차에서 앱스토어 출시까지 목표로 하고 계신다면 가입이 필요한 부분입니다. Apple Developer Program 가입은 여기서 하실 수 있습니다! https://developer.apple.com/programs/참고로 iOS 시뮬레이터에서는 원래 푸시 알림 테스트가 제한적입니다. Xcode 11.4 이상에서는 시뮬레이터에서 푸시 알림을 시뮬레이션할 수 있긴 한데, 실제 Firebase를 통한 원격 푸시 알림은 실제 기기(아이폰)에서 테스트하는 게 가장 확실합니다. 그러니까 시뮬레이터에서 안 된다고 해서 너무 걱정하지 않으셔도 됩니다정리하면 진행 순서는 이렇습니다. 먼저 Apple Developer Program에 가입하고, Apple Developer 콘솔에서 APNs 인증키(.p8 파일)를 생성한 다음, Firebase 콘솔의 프로젝트 설정에서 Cloud Messaging 탭에 해당 키를 업로드하면 됩니다. 이후 실제 아이폰 기기에서 테스트하시면 알림이 잘 들어올 거예요.혹시 진행하시다가 막히는 부분이 있으면 에러 메시지나 스크린샷과 함께 편하게 질문해주세요!
- 0
- 2
- 33
Q&A
수업교재 링크 오류
안녕하세요 해결되셨다니 기쁩니다!! BT님 답변 감사합니다 ㅎㅎ즐거운 주말 보내세요!!
- 2
- 2
- 68
Q&A
postman request url {{baseURL}} 어떻게 하신걸까요?
안녕하세요 dragonwaterr 님! 좋은 질문 감사합니다다음과 같이 3주차 맨 마지막에 baseUrl 사용하는 방법에 대한 내용을 추가해놨습니다 참고하셔서 변수 선언해서 사용하시면 좋을 것 같습니다 새해복많이받으세요!(사진)
- 0
- 2
- 59
Q&A
문제 풀이 방식 관련 질문입니다!
안녕하세요 zzzb1님 좋은 질문 감사합니다! 완전탐색에서 DFS와 BFS를 구분하는 건 처음엔 정말 헷갈리는 부분인데, 이런 의문을 갖는 것 자체가 개념을 깊이 이해하려는 좋은 신호입니다.1. 이 문제에서 BFS를 쓴 이유"나 잡아 봐라" 문제의 핵심을 다시 보면, "게임이 끝나는데 걸리는 최소 시간을 구하시오"라고 되어 있어요. 여기서 "최소"라는 키워드가 아주 중요합니다.4주차 교재에서 배운 내용을 떠올려 보면, BFS는 현재 위치에서 갈 수 있는 모든 경우를 한 단계씩 펼쳐보면서 탐색하기 때문에, 가장 먼저 도달한 답이 곧 최단 경로(최소 시간)가 됩니다. 마치 연못에 돌을 던졌을 때 파문이 동심원으로 퍼지는 것처럼, 1초 후의 모든 위치 → 2초 후의 모든 위치 → 3초 후의 모든 위치... 이렇게 시간 순서대로 탐색하니까, 코니를 처음 만나는 순간이 바로 최소 시간이 되는 거예요.반면 DFS로 풀면 한 경로를 끝까지 따라가 버리기 때문에, 처음 찾은 답이 최소라는 보장이 없어요. 예를 들어 3초 만에 잡을 수 있는데, DFS가 먼저 20초짜리 경로를 탐색해버릴 수 있는 거죠. 결국 모든 경로를 다 탐색한 뒤에 비교해야 해서 비효율적입니다.2. 그러면 완전탐색 = DFS 아닌가요?완전탐색은 "모든 경우의 수를 빠짐없이 탐색한다"는 뜻이지, 반드시 DFS를 써야 한다는 뜻은 아니에요. DFS도 완전탐색이고, BFS도 완전탐색입니다. 둘 다 모든 경우를 탐색하는 건 같고, 탐색하는 순서만 다른 거예요.DFS는 한 갈래를 끝까지 파고든 뒤 되돌아오는 방식이고, BFS는 현재 단계에서 갈 수 있는 모든 곳을 먼저 살펴본 뒤 다음 단계로 넘어가는 방식입니다. 둘 다 결국 모든 경우를 보긴 하지만, 문제가 요구하는 것에 따라 더 적합한 쪽이 달라지게 됩니다3. DFS vs BFS 선택 기준실전에서 판단하는 방법을 정리하면 이렇습니다.BFS를 쓰는 경우는 문제에서 "최소", "최단", "가장 빠른"이라는 키워드가 보일 때예요. BFS는 단계별로 탐색하기 때문에 처음 도달한 답이 곧 최소가 됩니다. 이번 LINE 문제처럼 "최소 시간"을 구하는 문제, 미로에서 최단 경로 찾기, 최소 횟수로 목표에 도달하기 같은 문제가 여기에 해당합니다.DFS를 쓰는 경우는 모든 경우의 수를 다 만들어봐야 하거나, 경로 자체를 기록해야 할 때예요. 예를 들어 순열/조합 만들기, 백트래킹으로 조건에 맞는 모든 해 찾기, 그래프에서 연결 요소 찾기 같은 문제가 여기에 해당합니다. DFS는 재귀적 구조와 잘 맞아서 "선택 → 탐색 → 되돌리기" 패턴을 구현하기 편하거든요.간단하게 기억하면 이래요: "최소/최단을 찾아라" → BFS, "모든 경우를 만들어라 / 경로를 추적하라" → DFS4. 이 문제에서 DFS를 쓰면 안 되나요?이론적으로 DFS로도 풀 수는 있지만, 실전에서는 좋지 않습니다. 브라운이 매 초마다 3가지 선택지(B-1, B+1, 2*B)가 있고 위치 범위가 0~200,000이라서, DFS로 한 경로를 끝까지 파고들면 엄청나게 깊어질 수 있어요. 최소 시간을 보장하려면 결국 모든 경로를 다 탐색해서 비교해야 하니 시간적으로도 불리합니다.BFS는 시간 단위로 탐색하니까 코니를 처음 만나는 순간 바로 답을 반환할 수 있어서 훨씬 효율적입니다 처음엔 DFS와 BFS 선택이 막막할 수 있는데, 문제를 몇 개 더 풀다 보면 "아, 최소를 구하라고? BFS!" 하는 감이 자연스럽게 생길 거예요. 지금 이렇게 "왜 이걸 써야 하지?"라고 고민하는 과정 자체가 실력이 느는 과정이라 매우 좋습니다! 더 궁금한 점 있으면 편하게 질문 부탁드립니다
- 0
- 2
- 49
Q&A
1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다
안녕하세요 지협님! 좋은 질문 감사합니다! 직접 풀어보고 "왜 배열이 더 나을까?"라고 고민하는 과정 자체가 실력을 키우는 데 정말 좋은 습관입니다1. 왜 배열로 푸는 것이 "제일 낫다"고 하는가?결론부터 말씀드리면, 이 문제에서 배열이 권장되는 이유는 "알파벳은 a~z까지 딱 26개로 고정"이라는 특성 때문이에요.alphabet_occurrence_array = [0] * 26 이렇게 길이 26짜리 배열을 만들면, 'a'는 0번 인덱스, 'b'는 1번 인덱스... 이런 식으로 아스키코드 계산(ord(char) - ord('a'))만으로 바로 접근할 수 있어요. 마치 캡슐호텔에서 번호만 알면 바로 방을 찾는 것처럼요.이 방식의 장점은 크게 세 가지예요.첫째, 추가적인 자료구조가 필요 없어요. 단순 int 배열 하나면 충분하기 때문에 메모리 오버헤드가 거의 없어요. HashMap은 내부적으로 해시 버킷, Entry 객체, 링크드리스트 등 부가적인 구조를 만들어야 하거든요.둘째, 접근 속도가 순수 O(1)이에요. 배열의 인덱스 접근은 메모리 주소를 직접 계산해서 바로 가는 거라서, HashMap의 해시 계산 → 버킷 찾기 → 키 비교 과정보다 실제 실행 속도가 빨라요. 빅오 표기법으로는 둘 다 O(1)이지만, 상수 시간의 크기가 다른 거죠.셋째, "최빈값이 여러 개일 경우 알파벳 순서가 앞인 것을 반환"하라는 조건을 자연스럽게 처리할 수 있어요. 배열은 인덱스 0(a)부터 순서대로 돌기 때문에, 같은 빈도수면 먼저 만난 게 자동으로 알파벳 순 앞쪽이에요. HashMap은 순서를 보장하지 않아서 별도의 정렬 처리가 필요하죠.정리하면, 이 문제처럼 "저장해야 할 키의 범위가 고정되어 있고, 그 범위가 작을 때"는 배열이 가장 단순하고 효율적인 선택이에요. 강의에서 이 풀이를 가르치는 이유도, 알고리즘 문제에서 이런 "고정 범위 → 배열 매핑" 패턴이 굉장히 자주 나오기 때문이에요. 2. Map을 사용한 풀이가 좋지 않은 풀이인가?전혀 나쁜 풀이가 아니에요! 오히려 실무적으로 보면 HashMap을 쓰는 게 더 자연스러운 경우가 많아요. 코드를 보면 getOrDefault도 잘 활용하고 계시고, 로직도 깔끔해요.다만 몇 가지 차이점은 알아두면 좋아요.시간복잡도 측면에서, 지협님의 코드에서 마지막에 list.sort()로 정렬하는 부분이 O(K log K) (K는 등장한 알파벳 수)를 추가로 소요해요. 배열 풀이는 그냥 26개를 순회하면서 최댓값을 찾으니 O(26) = O(1)이고요. 물론 K가 최대 26이라 실질적인 차이는 거의 없지만, 정렬 없이도 풀 수 있다는 점은 알아두시면 좋아요.만약 Map으로 풀되 정렬 없이 하고 싶다면 이렇게도 가능해요:public static char solution(String s) { Map map = new HashMap(); for (int i = 0; i entry : map.entrySet()) { // 빈도가 더 크거나, 같으면 알파벳 순서가 앞인 것을 선택 if (entry.getValue() > maxCount || (entry.getValue() == maxCount && entry.getKey() 이러면 정렬 없이 O(N) 한 번에 해결돼요.3. 그러면 언제 배열을, 언제 Map을 쓰는 게 좋을까?이 판단 기준을 갖고 가시면 앞으로 비슷한 문제에서 바로 적용할 수 있어요.배열이 유리한 경우: 키의 범위가 고정되고 작을 때 (알파벳 26개, 숫자 0~9, ASCII 128개 등). 이런 문제를 만나면 "배열로 매핑하면 되겠다!"라고 바로 떠올리시면 돼요.Map이 유리한 경우: 키의 범위를 예측할 수 없거나 범위가 매우 클 때 (예: 단어별 빈도수 세기, 좌표 매핑 등). 이런 경우는 배열을 잡기 어려우니 Map이 자연스러워요.지협님이 Map으로 먼저 풀어본 건 정말 좋은 접근이에요. 실제 코딩테스트에서는 Map으로 풀어도 충분히 통과하는 경우가 대부분이거든요. 다만 이 강의에서 배열 풀이를 강조하는 건, "고정 범위 → 배열 매핑"이라는 핵심 패턴을 익히게 하려는 의도예요. 이 패턴을 알아두면 나중에 더 복잡한 문제에서 응용할 수 있거든요.Java에서 배열로 풀어보고 싶으시다면 이런 식으로 작성할 수 있어요public static char solution(String s) { int[] count = new int[26]; // 알파벳 26개 고정 배열 for (int i = 0; i count[maxIndex]) { maxIndex = i; } } return (char) (maxIndex + 'a'); } Python의 ord(char) - ord('a')가 Java에서는 c - 'a'로 더 간단하게 표현돼요. Java는 char 타입이 숫자로 바로 연산되니까요.두 가지 방식 모두 직접 구현해보시면 "아, 이래서 배열이 깔끔하구나"를 체감하실 수 있을 거예요. 이해 안 되는 부분 있으면 언제든 또 질문해주세요!
- 0
- 2
- 60
Q&A
윈도우 사용자는 SQL 서버 어떻게 키나용?
안녕하세요 문성님! mysql> 프롬프트가 보인다는 건 이미 MySQL 클라이언트 안에 들어와 있는 상태예요. 여기서 mysql.server start를 입력하면 MySQL이 이걸 SQL 구문으로 인식하려고 시도하는데, 세미콜론(;)이 없으니까 "아직 입력이 안 끝났구나" 하고 -> 로 다음 입력을 기다리는 거예요.mysql 이 설정 잘 되셨으니 디비버로 한번 접속해보시겠어요?감사합니다
- 0
- 2
- 67
Q&A
flutter doctor
오 해결하셨다니 다행입니다! 감사합니다
- 0
- 2
- 50
Q&A
이벤트) 백엔드 기술면접 실전문제집
안녕하세요 iwbapg 님!해당 문제집은 수강평 이벤트 참여시 지급됩니다!수강평 이벤트 참여 방법은 강의의 맨 마지막 부분에 있으니 참고 부탁드립니다지금 참여해주셔도 수령 가능하십니다감사합니다!
- 0
- 2
- 68




