일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- mac hadoop
- Resources are low on NN
- 카카오 2020 코테
- Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000
- hadoop safe mode
- hadoop safe mode leave
- mac hive 3
- 이더리움
- Failed to connect to localhost:10000
- hive beeline
- is not allowed to impersonate hive (state=08S01
- 자소서 너무 오래 걸림
- 카카오 자물쇠와 열쇠
- hive beeline 실행
- 자소서 빨리
- hive beeline 에러
- mac hadoop 설치
- code=0)
- mac hadoop 설정
- 자소서 빨리 쓰는 법
- 도커 교과서
- 카카오 2020 코딩테스트
- mac hive
- 기업 조사 빨리 하는 법
- Safe mode is ON
- 자소서 시간 줄이기
- mac hadoop 3
- 이더리움 #ethereum
- hive beeline 설정
- 백준 18428
Archives
- Today
- Total
A seeker after truth
문제4 본문
사정상 문제 출처는 밝히지 않음.
거의 12시간 가까이 써서 풀었다. 문제 난이도가 어떤지는 모르지만, 실력이 좋았으면 더 빨리 풀었겠지.
대신 완벽하게 정답임. 데이터와 파일을 다룬다는게 이렇게까지 힘들고 어렵고 단순하지 않은 일인지 몰랐는데, 이 문제를 통해 깨달았다.
그래도 시간이 지나면 점점 익숙해지겠지!
무엇보다 sorted 함수에서 key = itemgetter(index) 라는 좋은 기능을 알게되었다는 점과,
(파이썬에서 단일/이중 리스트 정렬에 대해 다룬 공식문서 페이지: https://docs.python.org/ko/3/howto/sorting.html)
zip, [~ for ~ in ~], csv 모듈 기능을 이용했다는 점이 기뻤다. 공부한걸 써먹었으니!
# 특이 사항: vscode에서는 실행이 안되고, 피이참에선 아주 잘된다.
-> 해결 방법 찾았음! 비주얼 코드에서 같은 폴더 안에 파일이 있어도 파일을 불러오지 못하는 경우에 대한 댓글 답변:
"혹시 vscode에서 폴더 열기가 아니라 파일 열기로 파일을 여신건가요? 파일열기로 .py파일을 열었을 때 작업공간이랑 파일 위치랑 다른경우가 있는 것 같습니다.(디폴트 위치가 있는 것 같습니다) 파일 열기로 여셨다면 폴더열기로 다시 열어보심이 좋을 것 같아요"
# ANSWER : START
import collections
from operator import itemgetter
import csv
class myFile:
def __init__(self, filename=None, openmode=None):
if openmode == 'r':
self.f = open(filename, 'r') # self 해야하는...?
self.contents = self.f.readlines()
self.memberlist = []
for line in self.contents[1:]:
self.memberlist.append(line.strip('\n').split(','))
# 얘가 정렬된 값이다!
self.memberlist = sorted(self.memberlist, key=itemgetter(0))
elif openmode == 'w':
try:
self.f = open(filename, 'w') # fileIOstream
except:
raise Exception("Error")
def getStatus(self):
return isinstance(self.f, collections.Iterable)
def getBody(self): # read 모드 함수에서만 열린다 당연히!
try:
return self.memberlist
except:
print("Error")
return False
def setContentHead(self, firstline=None):
try:
self.firstline = firstline
return True
except:
print("error")
return False
def setContentBody(self, body=None):
try:
self.body = body
return True
except:
print("error")
return False
def writeFile(self):
writer = csv.writer(self.f)
writer.writerow(self.firstline)
for i in self.body:
writer.writerow(i)
def closeFile(self):
try:
self.f.close()
return True
except:
print("Error")
return False
def mergeList(list1, list2):
mergedlist = []
# common ids 모으는 과정
list1_ids = [list1[j][0] for j in range(len(list1))]
list2_ids = [list2[j][0] for j in range(len(list2))]
common_ids = (set(list1_ids)).intersection(set(list2_ids))
common_ids = list(common_ids)
for smallist1 in list1:
if smallist1[0] in common_ids:
littlelist = []
littlelist.extend(smallist1)
mergedlist.append(littlelist)
i = 0
for smallist2 in list2:
if smallist2[0] in common_ids:
avg = (int(smallist2[1]) + int(smallist2[2]) + int(smallist2[3]))//3
mergedlist[i].extend(smallist2[1:])
mergedlist[i].append(avg)
i += 1
return mergedlist
# ANSWER : END
file1 = myFile("inputdata1.csv", 'r')
file2 = myFile("inputdata2.csv", 'r')
if (file1.getStatus() != False) and (file2.getStatus() != False):
newList = mergeList(file1.getBody(), file2.getBody())
file3 = myFile("output.csv", 'w')
file3.setContentHead(["ID", "Name", "Course 1", "Course 2", "Course 3", "Average"])
file3.setContentBody(newList)
file3.writeFile()
file3.closeFile()
else:
print("input file error")
file1.closeFile()
file2.closeFile()
'Algorithm > 문제풀이' 카테고리의 다른 글
프로그래머스 정렬 문제풀이(1) (0) | 2020.01.24 |
---|---|
문제5 (0) | 2020.01.08 |
파이썬 수업 문제 분석 3 (0) | 2020.01.07 |
수업 퀴즈 문제 분석 2 (0) | 2020.01.02 |
수업 퀴즈 문제 분석1 (0) | 2020.01.02 |