캐릭터가 상대방 진영까지 가는데 걸리는 최단거리를 구하는 문제 제목 보고 그래프 문제인 줄 알고 시작했는데 알고보니 bfs 문제였다. 하지만 아직 bfs도 숙련되지 못했기 때문에 푸는데 오래 걸렸다... 문제의 조건 1. 게임 맵에서 벽과 길을 표시한 2차원 배열 maps가 주어짐 2. maps에서 0은 벽이라서 지나갈 수 없고 1은 길이라서 지나갈 수 있다. 3. 캐릭터의 초기 위치는 항상 [0,0] 이고 상대방 진영 위치는 항상 맵의 우측 하단이다. 즉 상대방 진영 위치는 n x m 크기를 가진 maps 배열 상에서 [n-1, m-1] 이다. 풀이 과정 1. bfs로 이동할 수 있는 다음 칸을 탐색하면서 다음 칸까지의 최단 거리를 계산한다. => bfs로 이동할 다음 칸을 저장할 queue 필요 qu..
신입사원 네오의 업무를 도와주기 위해 새로운 카카오 아이디를 만드려는 고객들이 규정에 맞지 않는 아이디를 입력한다면 규정에 맞는 새로운 아이디를 추천해주는 프로그램을 개발해야 하는 문제 문제의 조건 1. 고객이 입력한 아이디를 담은 string 배열 new_id가 주어짐 2. 아이디 변환 규칙 위 순서대로 차례차례 구현만 하면 된다. #include #include #include using namespace std; string solution(string new_id) { string answer = new_id; int stage = 1; //5단계부터는 new_id가 빈 문자열이 될 수도 있기 때문에 처음 4단계까지만 반복문 속에서 반복 while (4 >= stage) { for (int i =..
민우가 샀던 로또에 동생이 낙서를 하는 바람에 번호 몇 개를 알아보지 못 하게 되었는데... 민우는 로또 당첨번호 발표가 끝나고 난 후 자기가 샀던 로또가 최고 몇 등까지 당첨될 수 있는지 궁금해졌다. 저 같으면 어떻게든 번호를 복구했을 거 같은데 민우는 그냥 포기했나 봅니다. 민우가 산 로또의 최고 순위와 최저 순위를 알아보는 문제 문제의 조건 1. 민우의 로또 번호를 담은 배열 lottos, 당첨 번호를 담은 배열 win_nums가 주어진다. 2. 동생이 낙서해서 알아보지 못 하는 번호는 0으로 표시되어 있다. 3. 0들이 만약 로또 당첨 번호와 일치하면 민우가 얻을 수 있었던 최고 순위이고 일치하지 않으면 민우가 얻을 수 있었던 최저 순위이다. 4. [최고 순위, 최저 순위] 순서로 배열에 담아서 ..
하드디스크의 작업 처리 시간의 평균을 구하는 문제 문제의 조건 1. 작업 처리 시작 시간과 소요 시간이 담긴 2차원 배열 jobs가 주어짐 2. 하드디스크는 기본적으로 먼저 들어온 순서대로 처리를 하는데 만약 현재 처리중인 작업이 끝나지 않았는데 새로운 처리 요청이 2개 이상 들어오면 그 중 작업 소요 시간이 짧은 순서대로 처리한다. => 우선순위 큐에 현재 작업시간보다 짧거나 같은 작업들을 저장하는데 작업의 소요시간이 짧은 순서로 정렬해서 저장해야 함 (여기서 함수 사용법을 몰라서 아주 많이 헤멤...) 3. 모든 작업이 끝나서 쉬는 상태라면 남은 작업들 중 가장 먼저 들어온 것부터 처리한다. 2, 3번 과정을 반복해서 총 작업 소요 시간을 구한 뒤 작업의 갯수로 나눠서 평균 구하면 되는데 총 작업 소..
카카오 프렌즈들이 단체사진을 찍으려 하는데 각자 원하는 조건이 있다. 프렌즈들이 원하는 조건에 맞춰 단체사진을 찍을 수 있는 경우의 수를 구하는 문제 문제의 조건 1. 프렌즈들이 원하는 조건의 갯수 n, n만큼 조건을 담은 string 배열 data가 주어진다. 2. data의 각 원소는 "N~F=0" 과 같이 주어지는데 N(네오)는 F(프로도)와 0칸 떨어져 있고 싶다는 뜻이다. 즉 바로 옆에 붙어있고 싶다는 뜻이므로 둘 사이의 거리는 1이어야 한다는 뜻이 된다. (겹쳐있진 않고 일렬로 서 있으니까) 그렇다면 실제로 계산에 사용해야 할 프렌즈 사이의 거리는 주어지는 수에서 +1 한 값이라는 말이 된다. "N~F>1" 이라면 1칸을 초과해서 떨어져 있고 싶다는 뜻이고 "N~F
오픈채팅방에서 사람들의 출입 로그를 출력하는 문제 문제의 조건 1. 한 오픈채팅방의 출입 로그가 담긴 string 배열 record가 주어지는데 각 원소는 위와 같은 규칙으로 정해져서 담겨있다. 2. 만약 한 사람이 닉네임을 바꾸면 그 전에 출력되었던 메시지들의 닉네임도 모두 바뀐다. 그 사람이 나갔다가 다시 들어오면서 아이디를 바꿔서 들어와도 그 전에 출력되었던 닉네임도 모두 바뀐다. => record 배열을 처음부터 순회하면서 해시 맵에 유저아이디와 닉네임을 저장한다. key: 유저아이디 value: 닉네임 이렇게 저장하고 출입 로그의 첫 단어가 Enter 이거나 Change이면 key 유저아이디로 찾은 value값을 바꿔주면 된다. record 배열이 끝날 때엔 가장 마지막으로 사용한 닉네임으로 갱..
Leo가 길에서 본 카펫이 갈색 격자 테두리가 둘러져 있고 내용물은 노란색 격자로 채워져 있는데 Leo는 노란 격자 갯수와 갈색 격자 갯수만 기억하지만 카펫의 전체 크기는 기억하지 못한다. 이거만 해도 기억력이 많이 좋은거 같지만 Leo는 여기서 멈추지 않는다... Leo가 길에서 본 카펫의 노란색과 갈색 격자의 갯수를 이용해서 카펫의 전체 크기를 구하고 싶어하는 문제 문제의 조건 1. 갈색 격자 갯수 brown, 노란 격자 갯수 yellow가 주어짐 2. 카펫의 테두리는 갈색 격자로 둘러져 있음 즉 카펫의 최소 높이는 3이다. 예시 그림과 같이 노란 격자를 최소 한 칸 포함하면서 갈색 격자로 테두리가 둘러지려면 최소 3칸이 필요하다. -> 이렇게 접근했어야 하는데 처음에는 최대 너비를 구해서 접근하는 ..
주어진 숫자들로 조합할 수 있는 숫자들 중 소수가 몇 개인지 찾는 문제 문제의 조건 1. string으로 변환된 숫자 numbers가 주어짐 2. numbers의 각 숫자들을 조합해서 만들 수 있는 숫자들 중 소수를 찾아서 카운트하기 3. 여기서 조합이 가능한 모든 경우를 탐색한 후 중복되는 숫자는 거르고 소수를 찾아야 함 순열을 찾아주는 함수가 있는줄 모르고 저것을 직접 구현하려다 피 봤는데... next_permutation이라는.. 친절하게 모든 순열을 구해주는 함수가 있으니까 저걸 쓰자. #include #include #include #include using namespace std; bool isPrimeNum(int num) { if (2 > num) return false; //소수를 판..
- Total
- Today
- Yesterday
- 캐나다생활
- c++
- C언어기초
- 영어공부
- 아이패드
- 코딩공부
- 하드웨어
- 깊이우선탐색
- 프로그래밍
- 애플
- 컴퓨터사이언스
- 컴퓨터공부
- 해커랭크
- 기초
- 스위프트플레이그라운드
- greedy
- 컴퓨터
- 알고리즘
- 다이나믹프로그래밍
- 캐나다
- c언어
- dp
- BFS
- 프로그래머스
- 그리디
- 백준
- DFS
- 문제풀이
- hackerrank
- 너비우선탐색
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |