본문 바로가기

전체 글

(55)
[백준][1157][B1] 단어 공부 [문제] 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. [입력] 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다. [출력] 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다. 파이썬 숙련도에 따라 코드가 천차만별로 변할 수 있는 문제이다. 그동안 배운 문법으로 구현해보자. answer = '' S = input() S = S.upper() alpha_list = ['A','B','C','D','E','F','G','H','I','J','K..
[이코테][Chapter 5][문제] 4. 미로 탈출 [문제설명] N by M 크기의 직사각형 형태의 미로에 갇혀있다. 미로에는 괴물이 있어 이를 피해서 탈출해야 한다. 유저의 초기 위치는 (1, 1)이고 미로의 출구는 (N, M) 위치에 존재하며 한 번에 한 칸 씩 이동이 가능하다. 이 때 괴물이 있는 부분은 0, 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이 때 유저가 미로를 탈출하기 위해 움직여야 할 최소 칸의 개수를 구해라. 단, 칸을 셀 때 시작, 마지막 칸도 포함시켜야 한다. [입력조건] 첫째 줄에 두 정수 N, M(4
[이코테][Chapter 5]DFS, BFS 재귀 : 하나의 함수를 n,n-1,n-2,... 인자를 바꾸어가며 반복하는 것을 의미한다. "스택" 형태로 작용한다. 스택 : 선입후출. 상자 쌓기와 동일 큐 : 선입선출. 에스컬레이터와 동일 그래프 : 노드끼리 연결 관계를 표현한 자료형을 의미 DFS : 그래프에서, 한 노드를 계속 파고들면서 탐색하는 방식. 위의 그래프에서는 A-B-C-D-... 순이 된다. def dfs(graph, v, visited): #현재 노드를 방문 처리 visited[v] = True print(v, end=' ') #현재 노드와 연결된 다른 노드르 재귀적으로 방문 for i in graph[v]: #그래프 1번 노드 시작. 2,3,8 방문 if not visited[i]: #방문하지 않았다면? dfs(graph, i, ..
[이코테][Chapter 12][문제] 8. 문자열 재정렬 [문제 정의] 알파벳 대문자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출련한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다. 예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다. [입력] 첫째 줄에 하나의 문자열 S가 주어집니다. (1
[이코테][Chapter 12][문제] 7. 럭키 스트레이트 [문제] 어떤 게임의 아웃복서 캐릭터에게는 럭키 스트레이트라는 기술이 존재한다. 이 기술은 매우 강력한 대신에 항상 사용할 수는 없으며, 현재 게임 내에서 점수가 특정 조건을 만족할 때만 사용할 수 있다. 특정 조건이란 현재 캐릭터의 점수를 N이라고 할 때 점수 N을 자릿수를 기준으로 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 더한 값이 동일한 상황을 의미한다. 예를 들어 현재 점수가 123,402라면 왼쪽 부분의 각 자릿수의 합은 1+2+3, 오른쪽 부분의 각 자릿수의 합은 4+0+2이므로 두 합이 6으로 동일하여 럭키 스트레이트를 사용할 수 있다. 현재 점수 N이 주어졌을 때, 럭키 스트레이트를 사용할 수 있는 상태인지 아닌지를 알려주는 프로그램을 작성하시오. 럭키 ..
[이코테][Chapter 4] Implementation 구현(Implementation)은 말 그대로 "주어진 설명대로 프로그램을 작성할 수 있냐"는 문제이다. 사실 모든 알고리즘 문제, 코딩 테스트 문제가 이렇다. 사실 딱히 덧붙일 설명은 없는데, 자주 나오는 유형 하나가 상당히 골치 아프다. 순열과 조합이다. 순열과 조합 실제로 문제를 풀 때, 가장 먼저 파이썬의 itertools 라이브러리를 사용하여 간단하게 구현해본다. 그러나 삼성전자 코딩테스트의 경우에는 사용이 불가능하고, 실제로 itertools로 문제를 풀다가 시간초과(...)가 뜰수도 있고, 변수가 상당히 많다. 만약 문제가 발생할 경우, 순열과 조합을 만드는 코드를 따로 적어서 사용한다. itertools를 이용한 순열, 조합 import itertools arr = [1,2,3] for i..
[이코테][Chapter 11][문제] 3. 문자열 뒤집기 [문제설명] 다솜이는 0과 1로만 이루어진 문자열 S를 가지고 있다. 다솜이는 이 문자열 S에 있는 모든 숫자를 전부 같게 만드려고 한다. 다솜이가 할 수 있는 행동은 S에서 연속된 하나 이상의 숫자를 잡고 모두 뒤집는 것이다. 뒤집는 것은 1을 0으로, 0을 1로 바꾸는 것을 의미한다. 예를 들어, S = 0001100일 때는 다음과 같다. 전체를 뒤집으면 1110011이 된다. 4번째 문자부터 5번째 문자까지 뒤집으면 1111111이 되어서 두 번 만에 모두 같은 숫자로 만들 수 있다. 하지만 처음부터 4번째, 5번째 문자열 00을 11로 뒤집으면 한 번만에 모두 같은 숫자로 만들 수 있다. 문자열 S가 주어질 때, 다솜이가 해야 하는 행동의 최소 횟수를 출력해라 [입력조건] 첫째 줄에 0과 1로만 ..
[이코테][Chapter 11][문제] 2. 곱하기 혹은 더하기 [문제] 각 자리가 숫자 (0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'X' 혹은 '+'연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요. 단, +보다 X를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다. [입력조건] 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어집니다. (1