카카오 프렌즈들이 단체사진을 찍으려 하는데 각자 원하는 조건이 있다. 프렌즈들이 원하는 조건에 맞춰 단체사진을 찍을 수 있는 경우의 수를 구하는 문제 문제의 조건 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; //소수를 판..
베스트앨범에 수록할 곡을 찾는 문제 이것 또한 최대 재생 장르를 찾는데까진 생각해냈지만 나머지 수록곡을 찾는 부분 구현을 어찌 해야 할 지 감이 안 와서 구글링이 필요했음... 문제의 조건 1. 노래의 장르를 담은 문자열 배열 genres, genres 배열의 각 원소들의 재생 횟수가 담긴 배열 plays가 주어짐 2. genres의 노래는 고유 번호로 구분되는데 고유번호는 genres 배열의 인덱스 번호임 3. 노래 수록 기준은 다음과 같다. 4. 위 기준대로 노래를 담았을 때 수록되는 인덱스 번호 순서를 리턴하기 5. 필요한 것: 장르별 총 재생횟수 장르별 재생횟수와 인덱스 번호 장르별 총 재생횟수를 구해서 가장 많이 재생된 장르를 찾는다. 찾은 장르로 가장 많이 재생된 고유번호 2개를 찾는다. an..
일정한 길이로 문자열을 압축하는데 가장 짧게 압축할 수 있는 길이를 찾는 문제 인데 처음엔 어떻게 풀어야 할지 감이 안 와서 구글링해서 풀었습니다 ㅠ.ㅠ 문제의 조건 1. 압축할 문자열 s가 주어짐 2. 같은 알파벳이 연속해 있으면 압축할 수 있는데 문자열의 처음부터 끝까지 같은 길이로만 압축해야 한다. aaabb 일 때 앞에는 a가 3개니까 3a로 압축하고 b는 두개니까 2b로 압축해서 3a2b로 압축하는 건 안 됨 2aa2b = i; i++) //s 절반까지만 탐색 { string convert, tmp; int count = 1; tmp = s.substr(0, i); //i가 증가함에 따라 비교할 문자열의 길이도 점점 늘어날 것임 for (int j = i; s.length() > j; j += ..
죄금 시간이 걸렸지만... 다른 분들도 일일이 회전시킨거 같아서 조금 맘이 놓이는 문제...ㅎ 문제의 조건 1. rows x columns 행렬이 있고 회전시킬 값을 저장한 2차원 배열 queries가 주어짐 2. rows와 columns만 주어지기 때문에 주어진 가로 세로값으로 회전시킬 보드판을 직접 만들어야 함 3. queries의 값들로 만들어지는 사각형 테두리에 있는 원소들만 시계 방향으로 회전시키는데... 그 중에서 최소값을 배열에 담아서 리턴하기 4. 문제에서 x, y 값을 상당히 헷갈리게 적어놔서 디버깅하면서 x, y 인덱스값을 잘 구하는지 확인해야 함... 5. 회전 순서 회전을 시작할 인덱스를 먼저 구한 뒤 현재값을 저장할 변수에 저장한다. 시작 인덱스의 원소를 최소값으로 지정한다. ➡️..
풀이 과정을 떠올리는 건 쉬웠지만 시간이 너무 오래 걸리는 코드를 짜는 바람에 효율성 테스트 통과를 하지 못해서... 힌트 참고해서 다른 방법으로 다시 짜서 통과한 문제 ㅠ.ㅠ 문제의 조건 1. string s가 주어짐 2. 앞뒤로 두개가 같은 알파벳이면 제거할 수 있다. 같은 알파벳 두개를 제거하고 나면 남은 것들끼리 이어붙여서 또 짝지어 두개가 같으면 제거하고 남은것들끼리 이어붙이고.... 를 반복해서 모든 알파벳이 제거되면 1 제거되지 않으면 0 리턴 #include #include #include using namespace std; int solution(string s) { int answer = -1; vector tmp; for (int i = 0; s.length() > i; i++) {..
- Total
- Today
- Yesterday
- 기초
- 코딩공부
- 컴퓨터
- 그리디
- 문제풀이
- 영어공부
- 캐나다생활
- 백준
- 프로그래밍
- 캐나다
- 너비우선탐색
- 컴퓨터공부
- 스위프트플레이그라운드
- 다이나믹프로그래밍
- 아이패드
- 애플
- C언어기초
- 깊이우선탐색
- c언어
- 컴퓨터사이언스
- 해커랭크
- BFS
- 프로그래머스
- 알고리즘
- hackerrank
- c++
- DFS
- 하드웨어
- dp
- greedy
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |