코딩테스트 연습 25

[백준] 1157번 - 단어 공부 (PYTHON)

대소문자가 섞여있는 알파벳 문자열이 주어지고, 이 단어에서 가장 많이 사용된 알파벳을 알아내는 문제이다. 여기서 가장 많이 사용된 알파벳이 1개가 아닌 경우에는 ?를 출력한다. 풀이는 다음과 같다. str = input().upper() #대문자로 변경 ex) KIIJJJS tmp = list(set(str)) #중복 제거 ex) KIJS dics = [] for s in tmp: #인풋값별 문자반복 개수 구하기 ex) [1,2,3,1] cnt = str.count(s) dics.append(cnt) if dics.count(max(dics)) > 1: #최댓값 개수가 2개 이상이면 ? 출력 print('?') else: # ex) tmp[2] print(tmp[dics.index(max(dics))])..

[백준] 2675번 - 문자열 반복 (PYTHON)

먼저 추가로 입력받을 케이스의 수 n을 입력 받은 후, n개의 케이스를 각각 입력받아 계산값을 출력하는 문제이다. 각 케이스의 입력값은 "반복할횟수 반복할문자열" 의 모양으로 입력받는다.(두 값은 띄어쓰기로 구분) 풀이는 다음과 같다. t = input() cases = list() for i in range(int(t)): cases.append(input()) # 입력받은 케이스 수만큼 입력받은 값 리스트 담기 for lst in cases: # 각 케이스에서 반복횟수 / 반복할문자 분리 num = lst.split(' ')[0] str = lst.split(' ')[1] result = '' for item in list(str): result += item*int(num) # 각 문자열 반복횟수만..

[백준] 10809번 - 알파벳 찾기 (PYTHON)

소문자로만 이루어진 단어가 주어지면, a-z까지의 알파벳이 대해 주어진 단어에 포함되어있으면 해당 위치를, 없다면 -1을 출력하는 프로그램을 작성하는 문제이다. 먼저, 첫 번째 풀이이다. str = input() for i in range(97, 123): # 소문자 a-z까지 돌면서 체크 chk = -1 for index, s in enumerate(list(str)): # 입력받은 문자열에서 있는지 체크 if chr(i) == s: chk = index # 있으면 인덱스값 저장 break # 여러 번 있는 경우 첫번째 인덱스를 받아오기 위해 다음 알파벳으로 이동 print(chk, end=' ') 소문자로만 이루어진 문자열 str를 입력받아 a-z까지 돌면서 포함 여부와 인덱스를 추출하는 방식이다. ..

[백준] 11720번 - 숫자의 합 (PYTHON)

두 개의 숫자를 입력받아서 값을 계산하는 문제이다. 첫 번째로 숫자의 갯수를 입력받은 후, 두 번째로 공백없이 붙어있는 전체 숫자를 입력하면 이를 모두 다 더한 값을 출력하면 된다. 예를 들어 이런 식으로 출력되도록 만들면 된다. 풀이는 간단하다. 사실 두 번째 전체 숫자만 map함수를 이용하여 각 자릿수를 더하면 된다. n = input() all = input() print(sum(map(int, str(all))))

[백준] 11655번 - 아스키 코드 (PYTHON)

알파벳 소문자, 대문자, 숫자 0~9 중 하나가 주어지는 경우 그에 해당되는 아스키코드 값을 출력하는 프로그램이다. 이 문제는 아스키코드 변환 함수를 알고 있다면 바로 해결된다. 함수는 다음과 같다. 문자열 -> 아스키코드값: ord(입력값) 아스키코드값 -> 문자열: chr(입력값) 따라서, 위 함수를 이용하여 이렇게 풀어주면 된다. print(ord(str(input())))

[백준] 1065번 - 한수 (PYTHON)

한수라는 것은 어떤 양의 정수 x의 각 자리가 등차수열을 이룬다면, 그 수를 의미한다. 문제는 정수 n이 주어졌을 때 1~n 사이의 한수의 개수를 출력하는 것이다. 먼저 풀이는 다음과 같다. def han(n): result = 0 for i in range(1, n + 1): tmp = list(map(int, str(i))) # 정수 i를 자릿수별로 추출하여 리스트 담기 ex) [1,2,3] chk = diff = 0 if i < 100: # 1~99까지는 무조건 한수이므로 갯수+1 result += 1 else: # zip으로 리스트 안의 각 자릿수와 바로 다음자릿수 간의 차이 비교 for index, (a, b) in enumerate(zip(tmp, tmp[1:])): if index == 0:..

[백준] 4673번 - 셀프 넘버 (PYTHON)

이 문제는 조금 어려웠다. 일단 셀프넘버라는 걸 처음 들어봐서, 문제를 자세히 읽어야 했다. 10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램이다. 먼저, 첫 번째로 풀어본 방식은 다음과 같다. import math r_list = list(range(1, 10001)) # 1~10000까지의 숫자로 이루어진 리스트 생성 for i in range(1, 10001): lenght = len(str(i)) # 1~10000까지 각 숫자의 자릿수 추출 tmp = i for j in range(lenght): if j == 0: # 1의자리 수 더해주기 tmp = tmp + i else: tmp = tmp + math.trunc((i / pow(10, j))) # 10의자리 수 이상 더..

[백준] 8958번 - OX퀴즈 (JAVA)

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다. 예를 들어, "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. 다음 예시와 같이 OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 문제이다. 첫번째 줄에서는 총 몇 번의 퀴즈가 있었는지 숫자를 입력받는 것이므로, N변수에 받아 저장해둔다. 그리고 각 퀴즈에서의 점수를 받아 저장할 변수 score배열을 생성한다. 퀴즈의 갯수 N만큼 돌아가는 반복문을 가장 먼저 생성한 후, 입력받은 퀴즈결과는 X를 기준으로 토큰을 나누어준다. 이렇게 나누어진 총 토큰..

[백준] 4344번 - 평균은 넘겠지 (JAVA)

N개의 케이스에서 각각 평균을 넘는 학생의 비율을 계산하는 문제이다. 먼저 첫번째 줄에서 총 몇개의 케이스가 존재하는지 총 갯수 N을 입력받으며, 두번째 줄 부터는 첫 숫자는 해당 케이스의 학생 수가 주어진 후, 두번째 숫자부터는 각 학생들의 점수를 입력한다. 각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다. 먼저 총 케이스의 갯수 N을 입력받아주고, 이 숫자만큼 돌아가는 반복문을 만들어준다. 한 줄 당 한개의 케이스이므로 StringTokenizer를 통해 각각의 토큰으로 받아준 후, 첫번째 숫자는 학생 수 이므로 별도의 number변수에 저장하고 나머지 숫자들은 number의 수만큼 돌아가는 반복문을 통해 score배열에 담아준다. 그리고 Arrays.st..