728x90

https://www.acmicpc.net/problem/3449

 

3449번: 해밍 거리

입력을 여러 개의 테스트 케이스로 이루어져 있다. 첫째 줄에는 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 두 줄로 이루어져 있다. 각 줄에는 이진수가 하나씩 주어진다. 두 이진

www.acmicpc.net

 

문제 풀이

for문과 len 함수, 그리고 문자열 인덱싱 개념을 이용하여 풀 수 있는 문제이다.

 

N = int(input())
cnt = 0

for i in range(N):
  h1 = input()
  h2 = input()

  for j in range(len(h1)):	# 문자열도 인덱싱이 가능하다는 것을 이용
    if h1[j] != h2[j]:
      cnt += 1	# 같으면 해밍거리 1 증가
    else:	
      continue	# 아니면 다시 위로 반복문 돌아가기
  print("Hamming distance is {}.".format(cnt))	# format 함수 이용하여 출력형식 고정
  cnt = 0	# cnt 초기화
728x90
728x90

https://www.acmicpc.net/problem/14724

 

14724번: 관리자는 누구?

PROBRAIN, GROW, ARGOS, ADMIN, ANT, MOTION, SPG, COMON, ALMIGHTY중 동문 커뮤니티 관리자로 선발되는 후보가 소속한 동아리의 이름을 대문자로 출력한다.

www.acmicpc.net

 

풀이 전략

우선 동아리 목록의 순서는 변하지 않으므로 리스트로 만들어준다.

여러 값들을 공백을 기준으로 입력받으려면 member = list(map(int, input().split())) 처럼 리스트에 넣어주면 된다.

 

딕셔너리인 dict 객체 안에는 각 라인별 최고 점수 회원을 value 값, 리스트로 선언해준 동아리 이름을 key값으로 둔다.

그렇게 된다면 dict 안에는 동아리별 제일 많은 문제수가 저장된다.

 

이 vlaue 값들을 새로운 리스트에 저장해주고(인덱싱을 쉽게 하기 위해)

해당 리스트에서 가장 큰 값의 인덱스를 뽑아서

맨 처음에 만들어 준 동아리 목록에 인덱스를 넣어주면 어느 동아리인지 답이 나온다.

 

N = int(input())
dict = {}
circle = ['PROBRAIN', 'GROW', 'ARGOS', 'ADMIN', 'ANT', 'MOTION', 'SPG', 'COMON', 'ALMIGHTY']

for i in range(9):
  member = list(map(int, input().split()))
  dict[circle[i]] = max(member)

high = list(dict.values())	# dict에서 value값만 빼와서 리스트로 만들기
max_high = high.index(max(high))	# 위의 high에서 가장 큰 값의 인덱스 뽑기
print(circle[max_high])	# 인덱스에 해당하는 동아리명 print

 

728x90
728x90

https://www.acmicpc.net/problem/10867

 

10867번: 중복 빼고 정렬하기

첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

N = int(input())
k = set(map(int,input().split()))
k_sorted = sorted(k)

for i in k_sorted:
  print(i, end=" ")

 

set를 sort 할때는 sort(리스트에서만)가 아닌 sorted 메서드를 이용해야 한다

 

또한 리스트나 튜플을 순회하며 반복문을 짜고 싶을 때 range()대신 듀플 직접 넣어주면 된다.

728x90
728x90

https://www.acmicpc.net/problem/1350

 

1350번: 진짜 공간

첫째 줄에 파일의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 파일의 크기가 공백을 사이에 두고 하나씩 주어진다. 파일의 크기는 1,000,000,000보다 작거나 같은 음이 아닌

www.acmicpc.net

 

 

 

[풀이]

 

조건별로 필요할 클러스터 개수 구한 후 클러스터 사이즈와 곱해주면 된다.

 

우선 파일 크기가 클러스터 크기보다 큰 경우의 계산을 수행하기 위해 math 모듈 import 해준다.

이 문제의 핵심은 파일 크기가 클러스터 크기보다 큰 경우 클러스터 몇개가 필요한지 계산하는 것이다.

 

클러스터는 공유가 불가하다 했으므로 1이라도 넘치게 되면 클러스터 크기가 얼마가 되었던간에 하나를 더 써야한다.

그래서 파일 사이즈 / 클러스터 사이즈 의 몫을 올림 처리하여 필요한 클러스터 개수를 구해야 한다.

이때 이용하는 것이 math 모듈의 ceil() 메서드이다.

 

최종적으로 필요한 클러스터 개수를 구했으면, 구한 개수와 사전에 입력해 준 클러스터 사이즈를 곱해주면 된다.   

import math		# ceil() 올림 함수 쓰기 위해 math 모듈 import

N = int(input())
fileSize = list(map(int, input().split()))		# 파일 크기
clusterSize = int(input())		# 클러스터 크기
cnt = 0		# 클러스터 몇개 필요할 지 넣어주는 변수
tmp = 0		

for i in range(len(fileSize)):
  if fileSize[i] <= clusterSize:
    if fileSize[i] == 0:	# 파일 크기가 0인 경우 클러스터 필요 없음 
      cnt += 0
    else: cnt += 1		# 파일 크기가 클러스터 크기보다 작으면 1개만 필요
  elif fileSize[i] > clusterSize: 
    tmp = math.ceil(fileSize[i]/clusterSize)	# 파일 크기가 넘친다면 그만큼의 클러스터가 추가로 필요 이때 클러스터는 공유가 안되므로 나눈 몫을 올림처리		
    cnt += tmp
    tmp = 0

print(cnt*clusterSize)
728x90
728x90

https://www.acmicpc.net/problem/14910

 

14910번: 오르막

첫째 줄에 공백으로 구분된 N(1 ≤ N ≤ 1,000,000)개의 정수가 주어진다. 입력으로 주어지는 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

 

 

[풀이]

 

입력받은 숫자들을 리스트에 넣어주고, 동일한 값을 갖는 리스트 생성(.append() 메서드 이용)

그 후 입력 받은 문자열 .sort() 메서드 이용해서 비내림차순으로 만든 후

if문 이용해서 그 값이 같으면 비ㅐ림차순 올바르게 된 것('Good' 출력), 아니면 틀린 것('Bad' 출력)

N = list(map(int, input().split()))
input = []

for i in range(len(N)):
  input.append(N[i])

N.sort()

if input == N:
  print('Good')
else: print('Bad')
728x90
728x90

https://www.acmicpc.net/problem/2511

 

2511번: 카드놀이

첫 번째 줄에는 게임이 끝난 후, A와 B가 받은 총 승점을 순서대로 빈칸을 사이에 두고 출력한다. 두 번째 줄에는 이긴 사람이 A인지 B인지 결정해서, 이긴 사람을 문자 A 또는 B로 출력한다. 만약

www.acmicpc.net

 

 

 

 

[풀이]

 

리스트를 활용하여 문제를 풀었다.

 

이 문제의 핵심은 승점 총합이 같은 경우 승자를 출력하는 것에 있다.
A와 B 점수 총합이 같은 경우 가장 최근에 이긴 사람이 승자, 만약 모든 케이스의 점수가 같으면 'D'를 출력 해야 한다.

 

그래서 모든 케이스 점수가 같은 상황이 가장 특수한 경우이므로 if문으로 먼저 특정 짓고 시작했다.

 

 이후 나머지 케이스에 관해선 맨 뒤부터 비교해가며 먼저 더 큰 승점(점수)를 갖는 사람이 출력되고 반복문이 종료되도록 구성했다.

A = list(map(int, input().split()))
B = list(map(int, input().split()))
A_score = []
B_score = []

# 승점 리스트에 저장
for i in range(len(A)):
  if A[i] > B[i]:
    A_score.append(3)
    B_score.append(0)
  elif A[i] < B[i]:
    A_score.append(0)
    B_score.append(3)
  elif A[i] == B[i]:
    A_score.append(1)
    B_score.append(1)

# 합 출력
A_result = sum(A_score)
B_result = sum(B_score)
print(A_result, B_result)

# 승자 출력
if A_result > B_result:
  print('A')
elif A_result < B_result:
  print('B')
else:	# 총합이 같은 경우
  if A == B:	# 모든 게임 점수가 동일한 경우는 가장 특수한 경우이므로 if문으로 먼저 특정 
    print('D')
  for i in range(len(A)):	# 나머지 경우 뒤에서부터 역으로 이동하가며 비교
    if A[9-i] > B[9-i]:
      print('A')
      break
    elif A[9-i] < B[9-i]:
      print('B')
      break

 

728x90
728x90
N, W, H, L = map(int, input().split())
width = W // L
height = H // L
tmp = width*height

if tmp < N:
  print(tmp)
elif tmp > N:
  print(N)
elif tmp == N:
  print(N)
728x90

+ Recent posts