Python/코딩 테스트

알고리즘 먼데이 3주차 Python

Young_Metal 2022. 10. 18. 16:32

0커플

 

점수의 합한 값이 0이 되는 두 명을 짝지음

4번째 규칙을 지키지 못해서 두명이 소개팅을 못 받음.

소개팅을 진행하지 못한 사람의 점수를 합한 값을 구하라. 

 

지인의 수가 N(int) 그리고 다음 줄에 N명에 대한 점수가 있다. 

 

처음에는 list를 sort해서 index로 풀려고 했지만 아무리 생각해도 아닌 것 같아서 

절대값 함수를 이용해서 같으면 중복이니까 없에는 것으로 하려고 했다. 

 

map 함수로  모든 요소를 abs, 절대값화 해주면 같은 점수는 없으니까 3이 2개 2가 2개 4가 1개 5가 1개 이런식으로 나오게 될 것이고, 

나는 그러면 2개짜리가 아니라 하나만 나오는 녀석들을 딕셔너리에서 뽑아서 다시 리스트에 넣고 sum()을 통해서 합을 구하면 되는 노릇이다. 

 

근데 이렇게 하면 절대값이라서 합치는 것에 의미가 없어지게 된다. 

그렇다 절대값은 쓰면 안되는 것이었다. 

 

잠깐만 어차피 두개 더해서 사라지는거면 그냥 다 더하면 되는 거였다. 

미춋미춋

count ={}
for i in score:
	try:
		count[i] +=1
	except:
		count[i] = 1
result =[]
for g, b in count.items():
	if b ==1:
		result.append(g)
print(sum(result))

위 코드는 오답이다. 내가 이렇게 카운트해서 하는 거 코드 배운게 아까워서 넣는거다. 

근데 내 컴퓨터가 파이어폭스가 너무 느려서 테스트케이스 진행하는 것만해도 한 세월이 걸린다 .개빡.

import sys
N = int(sys.stdin.readline())
# 이거 두개 차이점 뭔지 암? \n은 위에 붙고 아래는 \n이 없음 ㅎㅎㅎ
score = list(map(int,sys.stdin.readline().split()))
# s = list(map(int, sys.stdin.readline().rstrip()))
print(sum(score))

답 은 4줄이면 끝난다. 

1번 문제

 

폴더 폰 자판

폴더폰 자판 형식에 대해서 array를 만들고

한번 누르면 숫자, 두번 누르면 순서대로 문자가 들어가는데, 1, 7, 9번에 대해서는 문자가 4개이다. 

수열을 바탕으로 구름이가 실제로 입력하려고 했던 걸 해석해달라고 한다. 

첫째줄에 수열의 길이가 둘째줄에 한줄로 수열이 주어진다. 

 

보다보니 2주차 때 나왔던 문제랑 비슷하다. 문자를 세는 거.

앗! 이것은 1번을 풀다가 빡이췬 내 풀이를 응용하면 될 거 같다. 

가보자고~!

일단 뭔가 숫자가 기준이니까 숫자에대해서 각 개수%인걸로 해야할 거 같다. 위치가 그러니까 %값인거지. 

일단 위에 방법 쓰면 다행이도 sort되지 않고 순서대로 key가 입력받아진다. 

여기서 원래 저렇게 카운트하면 helol이런거 못 작성할...거 같은데 또 오류 날거 같은데....

위에 방법으로 카운트 할 수 없다... 그냥 2주차 문제처럼 풀어야할거 같다. 

import sys
n = int(sys.stdin.readline())
s = list(map(int, sys.stdin.readline().rstrip()))

dict = {1:[1,'.',',','?','!'], 2:[2, 'A,','B','C'], 3:[3, 'D','E','F'], 4:['G','H','I'],
			 5:[5,'J','K','R'],6:[6,'M','N','O'],7:[7,'P','Q','R','S']}
count ={}
for i in s:
	try:
		count[i] +=1
	except:
		count[i] = 1
result =[]
for num, cnt in count.items():
	l = len(dict[num])
	c = cnt%l-1  #0부터 시작하는 인덱스 맞춰줘야지
	result.append(dict[num][c])
	
word = ''.join(s for s in result)
print(word)

당연하게도 에러가 나는 코드 

 

# -*- coding: utf-8 -*-
# UTF-8 encoding when using korean
import sys
n = int(sys.stdin.readline())
s = list(map(int, sys.stdin.readline().rstrip()))

dict = {1:[1,'.',',','?','!'], 2:[2, 'A,','B','C'], 3:[3, 'D','E','F'], 4:['G','H','I'],
			 5:[5,'J','K','R'],6:[6,'M','N','O'],7:[7,'P','Q','R','S'], 8:[8, 'T', 'U','V'], 9:['W', 'X','Y','Z']}
count ={}
word = []
cnt = 1
for i in range(n-1):
	if s[i+1]==s[i]:
		cnt +=1
	else:
		count[s[i]]=cnt
		cnt = 1
result = []
for num, cnt in count.items():
	l = len(dict[num])
	c = cnt%l-1  #0부터 시작하는 인덱스 맞춰줘야지
	result.append(dict[num][c])
	
word = ''.join(s for s in result)
print(word)

시간 부족으로 위의 코드가 맞는지는 모르겠다. 

 

구름이의 여행

N개의 섬(그래프다...), M개의 다리(한붓그리기다...), 두 섬을 잇는 다리는 무조건 1개 혹은 0개

 

1번 섬을 출발해서 N번 섬으로 가는데 통과하는 다리의 개수는 K개 이하

 

ㅎㅎㅎㅎ 포기

 

4번 문제도 시간 부족으로 포기....

 


난이도가 급 상승했다. 이제 별2개랑 3개인데 남은 5개에 살아남을 수 있을..까?

두렵다...ㅠㅠ