이 문제는 코드보다 먼저 문제를 단계로 끊어서 보는 게 핵심이다.처음 보면 그렇게 어려워 보이지 않는다.누가 누구를 신고했고, 일정 횟수 이상 신고당하면 정지되고, 그 사람을 신고한 사람에게 메일이 간다.말로 하면 단순한데, 막상 구현 들어가면 자꾸 꼬인다.이유는 하나다.이 문제는 한 번에 처리하려고 하면 안 되고,반드시 아래 순서로 나눠서 봐야 한다.중복 신고 제거신고 관계 저장신고당한 횟수 카운트정지 대상 판별메일 수 계산즉, 이 문제는 딕셔너리 문법 문제가 아니라구현 문제를 구조화하는 문제에 더 가깝다.🔗 문제 링크프로그래머스 92334 - 신고 결과 받기https://school.programmers.co.kr/learn/courses/30/lessons/92334문제 정리입력은 이렇게 들어온다..
최단거리 문제라고 해서 항상 BFS를 쓰는 것은 아니다.BFS가 정확하게 동작하는 경우는 모든 간선의 가중치가 같을 때다. 이 경우에는 먼저 도달한 경로가 곧 최단거리이기 때문에, 레벨 순서대로 탐색하는 BFS가 자연스럽다. 반면 간선마다 비용이 다르면, 더 적은 횟수로 이동한 경로가 더 짧다는 보장이 사라진다. 이때 필요한 알고리즘이 다익스트라(Dijkstra) 다. 다익스트라는 음의 가중치가 없는 그래프에서, 하나의 시작점으로부터 다른 모든 정점까지의 최단거리를 구하는 대표 알고리즘이다.즉, 다익스트라는 이렇게 이해하면 된다.BFS: 간선 비용이 전부 같을 때 최단거리다익스트라: 간선 비용이 서로 다를 때 최단거리이 글에서는 파이썬 기준으로, 왜 다익스트라가 필요한지, 어떤 방식으로 구현하는지, 코드..
DFS와 BFS는 정의만 외우면 계속 헷갈린다.실제로 코테에서 중요한 건“DFS는 깊이 우선, BFS는 너비 우선” 같은 문장 자체가 아니라,문제를 봤을 때 어느 쪽이 더 자연스러운지 판단하는 기준이다.정리하면 이렇다.최단거리 / 레벨 / 한 칸씩 퍼지는 구조면 보통 BFS가 맞고연결된 덩어리 처리 / 끝까지 파고들기 / 완전탐색이면 DFS가 더 자연스러운 경우가 많다즉, DFS/BFS는 알고리즘 이름을 외우는 문제가 아니라문제 구조를 보고 고르는 문제에 가깝다.이 글에서는 그 기준만 정리해보려고 한다.🔗 주제DFS와 BFS 차이 정리개념 요약둘 다 탐색이다.즉, 그래프나 격자에서 어떻게 방문할지를 정하는 방식이다.차이는 방문 순서다.DFS한 방향으로 끝까지 들어간다막히면 돌아온다스택 흐름이랑 잘 맞는..
리스트 컴프리헨션은 그냥 for문 짧게 쓰는 문법이 아니다.코딩테스트에서는 보통입력을 가공하거나, 조건에 맞는 값만 뽑거나, 간단한 변환을 한 줄로 처리할 때 제일 많이 쓴다.즉, 이걸 문법 하나로만 보면 잘 안 남고,반복 + 조건 + 변환을 한 번에 묶는 패턴으로 봐야 실전에서 손에 붙는다.처음에는 나도 그냥 “짧게 쓰는 문법” 정도로만 봤는데,막상 문제 풀다 보니까 이게 꽤 자주 나왔다.숫자 리스트 만들기조건에 맞는 값만 남기기문자열을 문자 단위로 쪼개기입력값을 가공해서 바로 리스트 만들기이런 데서는 그냥 반복문보다 더 자연스럽다.🔗 주제파이썬 리스트 컴프리헨션 정리+ 마지막에 연습문제 첨부합니다 필요하면 사용하시면 되어요개념 요약리스트 컴프리헨션 기본형은 이거다.[표현식 for 변수 in 반복가능..
이 문제는 겉으로 보면 차집합처럼 보이는데,실제로는 딕셔너리 카운팅 문제다.처음 보면 참가자 목록에서 완주자 목록 빼면 끝날 것 같아서set부터 떠올리기 쉬운데,동명이인 조건 때문에 그 접근은 바로 틀어진다.핵심은 단순하다.참가자 이름 개수를 세고완주자 이름 개수를 빼고마지막에 값이 남는 이름을 찾으면 된다즉, 이 문제는 리스트 비교 문제가 아니라이름 등장 횟수 비교 문제로 보는 게 맞다.🔗 문제 링크프로그래머스 42576 - 완주하지 못한 선수https://school.programmers.co.kr/learn/courses/30/lessons/42576문제 정리문제 조건은 이렇다.참가자 목록 participant완주자 목록 completion완주자는 참가자보다 항상 1명 적다참가자 중 한 명만 완주..
코딩테스트에서 split()이랑 map()은 거의 기본이다.처음엔 둘 다 따로 보면 애매한데,실제로는 입력 문자열을 쪼개고 → 원하는 자료형으로 바꾸는 패턴으로 계속 같이 나온다.특히 아래 한 줄은 코테에서 진짜 많이 쓴다.nums = list(map(int, input().split()))이걸 그냥 외우는 것도 방법이긴 한데,왜 이렇게 쓰는지 이해해두면 나중에 변형 문제에서도 덜 꼬인다.이번 글은 split()과 map()을입력 처리 관점에서 정리해보려고 한다.🔗 주제파이썬 split / map 정리+ 마지막에 연습문제 첨부합니다 필요하면 사용하시면 되어요개념 요약둘 역할은 딱 나뉜다.split() → 문자열을 나눈다map() → 나눠진 각 요소에 같은 변환을 적용한다즉 이 흐름이다.입력은 보통 문자..