55. 기차운행[stack 활용]
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 3 2 1 3 출력예제 1 PPOOPO 풀이 - A도시에서 B도시로 갈 때 교차로를 거쳐서 나온다 - 순서가 역전되있더라도 교차로에서 나올때는 1,2,3순서 맞게 나와야한다 - 순서를 비교할 변수 j=1로 초기화한다. 1을 증가시키면서 1, 2, 3 순서에 맞게 비교한다. - 일단 스택에 수를 넣으면 'P'를 문자열 벡터에 넣는다. - 스택에 넣은 값(현재 top)값과 j(현재 1번)가 같으면, pop하면서 'O'를 문자열 벡터에 넣는다. - pop하고 1번순서는 해결되었으므로 j++시켜 2번으로 만들고, 현재(to..
54. 올바른 괄호[stack 활용]
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 (()(()))(() 출력예제 1 NO 풀이 - 여는괄호, 닫는괄호 짝 안맞으면 NO, 맞아서 다 없어지면 YES - for문은 문자열의 마지막인 '\0'이 아닐때까지 - '('이면 스택에 넣는다, ')'이면 스택이 비어있지 않을시 뺀다 - 닫는 괄호인데 스택이 비어있으면 NO출력해야 하기 때문에 flag 변수를 두어 값을 0으로 변경한다. - flag=1인상태로 스택에 아무것도 남지 않으면 올바른 괄호이며 나머지는 다 올바른 괄호가 아니다. #include #include #include #include using..
53. K진수
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 11 2 출력예제 1 1011 풀이 - 스택 자료구조를 이용 - 11의 2진수 값을 구한다 - k진수라면 k로 나눈 나머지 값을 스택에 저장한다(이때 입력 값 n이 0이 되지 않도록 while루프가 >0일때라는 조건 명시) - k로 나눌때마다 n은 몫을 가진다. - char 배열에 "0123456789ABCDEF"를 넣어 놓고 스택에서 꺼낸값을 인덱스로 써서 진수 변환을 한다 - 스택은 #include 을 통해 사용이 가능 - s.top(); 가장 top에 있는 값을 참조 하는것, top()으로 참조해서 출력 후에 ..
52. Ugly numbers
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 10 출력예제 1 12 풀이 -3 point 알고리즘 -소인수 분해해서 2, 3, 5로만 이루어진 수를 찾는다 - 3개의 포인터를 놓고 위치 값에 2, 3, 5로 곱하는데 이때 가장 작은 값으로 다음 값을 바꿔준다 - for문은 2번부터 n번까지, n번째 값이 정답이 된다 - 2, 3, 5로만 곱해진 수에 2, 3, 5를 곱하기 때문에 당연히 2, 3, 5 만으로 이루어진 수가 된다. - 주의해야 할 점이 있는데 가장 작은 값이 p2, p3, p5에서 중복해서 나올 수 있다. => 따라서 min값을 구하고 p2, p..
50. 영지(DP)
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 6 7 3 5 1 3 1 3 2 1 2 1 3 1 1 2 1 3 1 5 1 3 4 5 1 1 3 1 3 2 3 1 1 3 1 1 2 1 3 1 3 1 2 2 2 3 출력예제 1 16 풀이 - 2x3배열 땅의 나무 카운팅 시 가장 많은 땅을 찾는다(4중 for문으로 찾을 수도 있지만 timeout 당할 수 있음, 비효율적) - dy 배열로 누적합계를 만든다. dy[i][j] = 왼쪽+위쪽 -왼쪽&위쪽+원배열[i][j] - dy배열을 완성한 후 찾을 땅의 n, m를 입력받음 - dy배열에서 합계가 가장 큰 땅을 찾기 위..
49. 블록의 최댓값
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 4 2 0 3 1 1 1 2 3 출력예제 1 17 풀이 - 2차원 배열 문제 - 정면에서 봤을 때 값들로 세로 행을 일치 시켜 a배열에 입력한다. - 오른쪽에서 봤을 때 값들은 b배열에 역순으로 넣는다. - for문을 돌면서 b값보다 큰 값들은 b값으로 바꿔준다 - 마지막으로 합계를 구해서 sum을 출력한다. * 오른쪽에서 봤을 때 값들을 역순으로 넣는다는 생각과, 정면 값들로 세로 행을 일치시킨다는 것을 생각해내야 쉽게 풀 수 있었음 #include using namespace std; int a[11][11], ..
48. 각 행의 평균과 가장 가까운 값
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 3 23 85 34 17 74 25 52 65 10 7 39 42 88 52 14 72 63 87 42 18 78 53 45 18 84 53 34 28 64 85 12 16 75 36 55 21 77 45 35 28 75 90 76 1 25 87 65 15 28 11 37 28 74 65 27 75 41 7 89 78 64 39 47 47 70 45 23 65 3 41 44 87 13 82 38 59 12 48 29 80 출력예제 1 42 34 43 42 53 53 45 36 50 45 41 37 54 64 43 4..
47. 봉우리
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 5 5 3 7 2 3 3 7 1 6 1 7 2 5 3 4 4 3 6 4 1 8 7 3 5 2 출력예제 1 10 풀이 2차원 배열 탐색 문제 2차원 배열의 한위치에서 상하좌우와 비교해 값이 더 크면 봉우리가 되고 이를 카운팅한다. - 주의해야 할 점 (1) 범위가 n=50까지 들어갈 수 있기 때문에 배열 선언시에는 전역으로 a[51][51] (2) flag값을 설정해서 상하좌우와 비교했을 때 기준이 되는 값보다 큰 값이 하나라도 나오면 바로 break하는 구문이 필요 - 생각해야 할 점 (1) 2차원 배열의 한 위치에..
46. 멀티태스킹(카카오 먹방 문제 변형)
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 3 1 2 3 5 출력예제 1 3 풀이 - 시뮬레이션 문제, 45-공주구하기 문제와 비슷한 로직 - 주의해야 할 점 (1) 배열 크기가 클 때는 전역변수로 선언, 지역변수로 선언 시 잘못된 값이 들어갈 수 있으나 전역변수로 선언 시 0으로 모두 초기화 (2) 총 작업의 크기와 정전되는 시간이 같거나, 정전되는 시간이 더 클 시에는 정전 된 후에 할 작업이 없음 => 이때는 -1을 출력함 (3) 정전이 되고 난 후에 해야할 작업의 값이 0이라면, 그 다음 값을 찾아서 출력해주어야 함 - 생각해야 할 점 (1) 총 작업..
45. 공주구하기
·
알고리즘
인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다. 문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅 입력예제 1 8 3 출력예제 1 7 풀이 - 시뮬레이션 문제 - 8명의 왕자를 시계방향, 3번째에 해당하는 왕자를 한명씩 추방 - 입력 변수: n, k(왕자 수, 특정 수) - 풀이법 (1) 벡터배열 0으로 초기화 (2) 무한루프를 돌며 position값을 증가 => 배열의 값이 0이면 cnt++ (3) cnt==k가 될때 cnt를 0으로 초기화, bp++, 해당 위치에 1 넣어줌 (4) 루프를 돌다가 position값이 n보다 커질때, 1로 다시 초기화 => if(pos>n) pos=1; (5) 루프 돌다가 bp가 n-1, 즉..