목록전체 (275)
컴굥일지
list 리스트의 요소는 자료형이 다 달라도 된다. (리스트 자체가 요소로 있을 수도 있다) 대괄호를 사용하여 리스트를 선언할 수 있다. 리스트에서는 슬라이싱을 사용할 수 있다. 수정 가능(mutable) a=[100,5.5, "No", [144,23]] a.append("4") #추가 a.insert(2,"34") #2번 인덱스에 "34" 추가 a.cleaer() #요소 전부 삭제 a.remove(100) #리스트 안의 특정 요소 삭제 a.pop() #가장 마지막 원소를 리스트에서 삭제하고 반환 del a[1:3] #인덱스로 요소를 삭제 a.sort() #리스트를 오름차순으로 정렬 a.reverse() #리스트의 요소를 역순으로 만듬 a.count(3) #숫자 3이 리스트 안에 몇 개나 있는지 알려줌 ..
문제 https://www.acmicpc.net/problem/15312 문제 내용 영어 이름 2개를 입력받아, 두 이름의 궁합을 출력하면 된다. 궁합은 알파벳의 획순을 두고, 인접한 것끼리 계속 더해나가면 되는 방식이다. (1의 자리만 나타낸다) 문제 풀이 먼저, 문제 힌트에 적힌 대로 각 알파벳 별로 획순을 배열에 미리 저장해둔다. 그리고 문자열 두 개를 입력받아, 알파벳을 번갈아가며 저장하면 된다. 이때 알파벳 자체를 저장하기보단, 알파벳의 획순을 저장한다. 그리고 반복문 안에서 양 옆의 숫자와 계속 더해나가면 된다. 원소가 2개만 남았을 때, 결과를 출력하고 반복문을 멈추면 된다. 코드 #include #include #include using namespace std; //획 int line[2..
문제 https://www.acmicpc.net/problem/9076 문제 내용 심판 5명의 점수가 주어진다. 이때 최고점과 최저점의 점수를 제외한 심판 3명의 점수 중, 최고점과 최저점의 차이가 4 이상이면 "KIN"을 출력한다. 그렇지 않으면 심판 3명의 점수의 합계를 출력하면 된다. 문제 풀이 심판 5명의 점수를 입력받은 뒤 정렬을 진행한다. 이후, 0번과 4번 인덱스는 각각 최저점과 최고점이니 배제하고 생각한다. 4번 인덱스와 1번 인덱스의 차가 4 이상이면 "KIN"을 출력하고 다음 테스트 케이스로 넘어간다. 그렇지 않다면 인덱스 1~3까지의 합을 더하고 출력하면 된다. 코드 #include #include #include using namespace std; int main() { //입력 ..
문제 https://www.acmicpc.net/problem/1337 문제 내용 올바른 배열을 만들기 위해 추가해야 하는 최소한의 원소의 개수를 구하면 된다. 올바른 배열은 배열 안의 원소 중 5개가 연속인 경우를 말한다. 문제 풀이 처음에는 어떻게 풀어야 할지 고민이 많았다. 일단 배열을 입력받아서 sort()로 정렬을 진행한다. 그 이후, 처음부터 끝까지 반복문을 돌아야 한다. 반복문 안에, 또 다른 반복문이 필요하다. 현재 원소를 포함하여 5개가 연속되는지를 판단하는 것이다. 매 반복문마다 연속되는 것의 개수를 파악하고, 결괏값을 max()로 판단해서 업데이트하면 된다. 결괏값이 만약 5 이상이라면, 한 번에 연속되는 것이 5개 이상이라는 의미이므로 추가해야 할 원소의 개수는 0개이다. 결괏값이 ..
문제 https://www.acmicpc.net/problem/2011 문제 내용 A~Z까지의 알파벳을 1~26으로 각각 매칭 해두고 암호화를 진행했다. 숫자로 이루어진 암호가 주어질 때, 이를 해석하고자 한다. 해석할 수 있는 가짓수를 출력하면 된다. (정답이 매우 클 수 있으므로, 1,000,000으로 나눈 나머지를 출력한다.) 문제 풀이 dp문제이다. 일단 가장 첫 숫자가 0이라면 암호 자체가 잘못되었기 때문에 0을 반환한다. dp[a]=b라고 쓰면 a번째까지 해석할 수 있는 가짓수가 b 개라는 뜻이다. dp[1]=1이다. 왜냐하면, 1번째 숫자까지 읽을 수 있는 단어의 개수는 1개이기 때문이다. (1이라면 A, 2라면 B... 9라면 I가 된다.) 그럼 dp[2]는 얼마일까? 이때부터는 고려사항이..
문제 https://www.acmicpc.net/problem/2580 문제 내용 완성되지 않은 9*9 크기의 스도쿠를 입력받아 완성시키는 문제이다. 문제 풀이 이 문제는 백트래킹 방식을 통해 문제를 풀었다. 아직 채우지 못한 빈칸을 찾아서 배열에 저장한 뒤, 그 빈칸에 1~9를 차례로 넣어보며 스도쿠를 완성시키는 방식으로 문제를 해결하면 된다. 스도쿠의 특성상, 같은 행 / 같은 열 / 같은 3*3칸 안에서는 1~9이 숫자가 한 번씩만 나올 수 있다. 이 특성을 체크하기 위해 check() 함수를 별도로 만들어 사용했다. 코드 #include #include #include using namespace std; vectorblank; bool finish = false; //1~9 체크 bool che..
문제 https://www.acmicpc.net/problem/9657 문제 내용 상근이와 창영이가 번갈아가며 돌을 가져가는데, 한 번에 1개, 3개, 4개를 가져갈 수 있다. 마지막 돌을 가져가는 사람이 이기는 게임이다. 누가 이기는지 구하면 된다. 문제 풀이 [백준 9655 돌 게임] 문제에서 가져갈 수 있는 돌의 개수가 하나 더 추가된 문제이다. 돌의 개수에 따른 규칙은 밑의 코드 주석으로 달아두었다. 코드 #include using namespace std; int dp[1005] = { 0, }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //입력 int n; cin >> n; //문제 해결 /* 마지막에 가져가는 사..
문제 https://www.acmicpc.net/problem/9655 문제 내용 상근이와 창영이가 번갈아가며 돌을 가져가는데, 한 번에 1개 또는 3개를 가져갈 수 있다. 마지막 돌을 가져가는 사람이 이기는 게임이다. 누가 이기는지 구하면 된다. 문제 풀이 규칙만 알면 매우 쉬운 문제이다. 돌의 개수에 따라 규칙을 찾아보자 n=1: 상근이가 먼저 가져가므로 상근이가 이긴다. n=2: 상근(1), 창영(1) 이므로 창영이가 이긴다. n=3: 상근(3) 이므로 상근이가 이긴다. n=4: 상근(3), 창영(1) 이므로 창영이가 이긴다. (1 3 또는 1 1 1 1 이어도 창영이가 이긴다.) n=5: 상근(3), 창영(1), 상근(1) 이므로 상근이가 이긴다. (1 3 1 또는 1 1 3 또는 1 1 1 1 ..
문제 https://www.acmicpc.net/problem/20301 문제 내용 1~N번까지의 사람이 원을 이루며 앉아있고, 계속해서 K번째 사람을 지워나가면 된다. 이때, M명의 사람이 제거될 때마다 방향을 바꿔나가면 된다. 문제에서는 사람을 지워나가는 순서를 출력하기를 바란다. 아래 링크는 백준 1158 요세푸스 문제이다. 이 문제에서 'M명의 사람이 제거될 때마다 방향을 바꾼다'라는 조건을 추가하면 지금 풀고자 하는 문제가 된다. https://gyong0117.tistory.com/entry/BOJ%EB%B0%B1%EC%A4%80-1158C-%EC%9A%94%EC%84%B8%ED%91%B8%EC%8A%A4-%EB%AC%B8%EC%A0%9C 문제 풀이 백준 1158 요세푸스 문제는 queue로 ..
문제 https://www.acmicpc.net/problem/18115 문제 내용 사용할 수 있는 기술 3가지가 있다. 1. 제일 위의 카드 1장을 바닥에 내려놓는다. 2. 위에서 두 번째 카드를 바닥에 내려놓는다. 카드가 2장 이상일 때만 쓸 수 있다. 3. 제일 밑에 있는 카드를 바닥에 내려놓는다. 카드가 2장 이상일 때만 쓸 수 있다. 이 기술들을 사용하여 카드를 다 내려놓았을 때, 카드의 순서가 위에서부터 순서대로 1,2,3,..., N이 되어있다. 초기 카드 상태를 구하는 문제이다. 문제 풀이 역순으로 계산해야 하기 때문에 조금 헷갈렸다. 초기 상태 : ????????? 기술 사용 순서: 2 3 3 2 1 (예시) 최종 상태 : 5 4 3 2 1 우리는 최종 상태와, 기술 사용 순서를 가지고 ..