첫 주말 나들이

@daum.jeju 2012. 11. 18. 23:35

2012. 11. 18 (일)


어제와 오늘, 


입사 첫주를 보내고 주말을 맞이했다.


이번주에는 주변도 좀 돌아다니고 집을 알아보러 다니려 했다.


결과적으로 돌아다니기만 한 꼴이 되었지만 ㅠㅠ 뭐 다음주부터 알아봐도 되긴 하니까 ㅋㅋ


어제는 노형오거리 아래쪽으로 내려가 민속오일장까지 들렀다가 돌아왔다.


사람들이 무-척 많았는데 특히 분식집 앞에는 내가 껴들어갈 자리도 없었다 ㅋㅋㅋ 이정도일 줄이야 ㅠㅠ


날씨가 흐리고 바람이 많이 불어 내 머리는 계속해서 초사이어인 머리가 되었다 @_@


돌아오는 길에는 이마트에 들러 끼니도 해결하고 옷 구경도 하다가 돌아왔다. 


그리고 오늘은 정말 날씨가 좋았다. 기상시간도 어제보다 빠르다~+_+ 좋아 얼른 밖으로 나가자!!


오늘은 구제주 방면을 탐색할 참이었다. 그쪽에 워낙 신축 건물들이 많이 들어선다는 정보를 입수했기 때문이다.


컴퓨터를 켜고 지형을 살피고 밖으로 나섰다. 택시를 타고 시청으로 ㄱㄱ


택시비는 약 6천원 정도 나온다. -_-;


그냥 '동' 단위 이동이지만 상당히 거리가 있는 편이다. 


시청 위쪽으로 가면 삼성혈이 있길래 그냥 기웃거렸다. 맙소사 관람료를 받다니.. ;; 


걸어서 찾아가기가 엄청 수월하지는 않았다. 점심은 뼈다귀 해장국으로 :)



근데 여기서는 명칭이 좀 달랐다. 뼈감탕? 이게 감자탕 같았고, 내가 먹은건 뼈장국 이었던가.. ㅡㅡa 


암튼 생소한 단어였다. 맛은 ^^b


이제 신축단지로 향했다. 베라체라는 아파트가 있는데 그 근처에 신축이 많다고 한다.


근처에서 날씨가 너무좋아 한컷 찍었다.




정말 신축이 많아보이고 계속 짓고 있었다.


그런데 내 생각과는 좀 달랐다. 곳곳에 원룸임대라고 써붙이고 있을 줄 알았는데.. 


일단 빌라가 많았고 상가 임대만 본 것같다. -_-; 그래서 집 보기는 일단 포기하고 구경만 좀 하다가 돌아왔다.


개인적인 생각으로 여기보다는 노형동, 연동 근처가 더 좋아 보인다. 조용하긴 하지만 뭔가 아직은 삭막했다.


돌아오는 길에는 이마트에 들러 옷도 한벌 사고, 식량(?)도 구입했다. 


이상하게 여기 오니 저녁에 배가 고파서...ㅋㅋㅋ


회사에서 아침,점심,저녁 모두 해결하고 밤에 간식까지 먹으니, 정말 살이 찔것같다. 난 좀 쩌야하니까 -_-;


'@daum.jeju' 카테고리의 다른 글

2013 Daum 모바일개발 경력공채  (0) 2013.03.19
2013 Daum 검색개발 경력공채  (0) 2013.02.13
정사원 발령  (0) 2013.02.01
2012 다송파티  (0) 2012.12.27
입사 첫날  (0) 2012.11.18
Posted by DevMoon
,

입사 첫날

@daum.jeju 2012. 11. 18. 23:08

2012. 11. 13 (화)


Daum 입사 첫날이다.


한남사옥에 들렀다가 교육을 들은 후 비행기를 타고 제주오피스로 떠난다.


전날은 짐을 싸고 정리하느라 정말 육체적으로 너무 피곤한 하루였다. 그래도 아침에는 견딜만했다.


자취를 하고 있었고 몇일 후 다른 사람이 들어와 살아야했기 때문에 짐을 한쪽에 정리해둬야 했다.


일단 제주도에서는 한달간 회사가 마련해준 숙소에 살면서 집을 알아봐야 하기 때문에 짐을 지금 옮길 수는 없었다.


여튼, 설레임을 안고 입사 첫날을 맞았다.



회사를 가는 길동안 휘파람이 절로 나왔다. 이제 또다른 시작이다.


오전에 교육을 듣고 머그컵을 포함해 문구류를 받았다. 개인적으로 머그컵을 무척 갖고 싶었는데 굿잡~!


듣다보니 정말 복지가 잘 되어있는 것같았다. :)


교육이 끝나고 교육해주신 분과 서울에서의 마지막 식사를 하고 김포공항으로 향했다.


제주도로 가는 사람은 나를 포함해 2명이었다. 함께가는 분은 GMC에서 근무하게 되고, 나는 스페이스.1에서 근무하게 된다.


제주도로 가는동안 계속 담소를 나누면서 갔다. 택시를 타고 공항으로 향하는데 팀장님께 전화가 왔다.


첫날이라 바로 숙소로 갈줄 알았는데 일단 회사로 가야했다. 


제주도에 도착 후 케리어 가방을 끌고 회사 앞까지 갔다. 이곳이 내가 새롭게 일 할 곳이구나..




헥헥 거리면서 찍은거라 사진이 흔들렸나보다 ㅠㅠ


도착해서 PC 등등을 받고 설치하고 6시가 되어 팀분들과 밖으로 나갔다.


일단 숙소에 들러서 체크인을 한 후 어떤 막창집으로 향했는데 사람들이 줄을 서서 먹을 정도였다. 맛집이구나 +_+


한라산 소주를 마신것도 처음. 마시기는 편한데 그렇다고 많이 마셨더니... 뻗고 말았다 ㅠㅠ


역시 술은 마시기 편하면 조심해야 하는 것인데 ㅠㅠ


다행인지 불행인지 다음날 일찍 일어나서 무사히 출근할 수 있었다. 휴 ==33 첫날부터 이미지 참 @_@;;


팀원분들 모두 인상이 좋았다. 앞으로 열심히 할 것을 다짐하며, 화이팅!!


'@daum.jeju' 카테고리의 다른 글

2013 Daum 모바일개발 경력공채  (0) 2013.03.19
2013 Daum 검색개발 경력공채  (0) 2013.02.13
정사원 발령  (0) 2013.02.01
2012 다송파티  (0) 2012.12.27
첫 주말 나들이  (0) 2012.11.18
Posted by DevMoon
,
이제 마지막 문제란다. -_-; 

어려운 문제가 나올까봐 긴장하긴 했지만 마지막이라니 왠지 아쉽네잉.


한 번 풀었다가 내가 문제를 잘못 해석한거라서 이전것은 말아먹었다 ㅜㅜ 


문제는 아래와 같다. (새창으로보기)



문제


사전에 등장하고 길이가 같은 두 단어가 주어졌을 때, 한 번에 글자 하나만 바꾸어 한 단어를 다른 단어로 변환하는 프로그램을 작성하라. 변환 과정에서 만들어지는 각 단어도 사전에 있는 단어여야 한다.

[실행 예]

input : DAMP, LIKE
output: DAMP -> LAMP -> LIMP -> LIME -> LIKE

[사전 데이터]

네 글자 단어 - word4

다섯 글자 단어 - word5

 

[심화 문제 - 풀지 않아도 됩니다]

심화문제 1: 가장 적은 수의 단어를 써서 변환하도록 프로그램을 작성해봅시다.

심화문제 2: 가장 많은 수의 단어를 써서 변환하도록 프로그램을 작성해봅시다. 단, 변환 과정에서 같은 단어가 두 번 나오면 안됩니다.


다른 사람들 보니 다들 그래프로.. 풀었길래 따라하는건 양심에 걸려서 새롭게 풀어보았다.


처음에 짰던 재귀형식으로 고민하다가 너무 오래 걸려서 새로운 전략을 짰다.


새로운 해결전략은 다음과 같다. (brand new!!)


1. 처음 element set에는 출발 단어 하나만 들어있다. 사전을 뒤적거리면서 distance가 1인 단어들을 모두 표시힌다.


2. 1번 과정에서 표시한 단어들과 distance가 1인 단어들도 모두 표시한다.


3. 더이상 새로운 단어가 추가되지 않을때까지 위 과정을 반복한다. 도중에 정답을 찾으면 바로 return.


한마디로 distance가 1인 집합에 계속해서 끌어들이는 방법이다.


이에따른 코드는 다음과 같다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_WORD_NUM	8192
#define MAX_WORD_LEN	6

int nwords;
int elem[MAX_WORD_NUM];

char dic[MAX_WORD_NUM][MAX_WORD_LEN];

int makedic(char *fname)
{
	FILE *fp = NULL;

	fp = fopen(fname, "r");

	if (!fp) {
		printf("%s open fail.\n", fname);
		return 0;
	}

	int n = 0;

	while(1)
	{
		n = fscanf(fp, "%s", dic[nwords]);
		if (n == EOF) break;
		nwords++;
	}

	fclose(fp);
	return 1;
}

int distance(char *w1, char *w2, int len)
{
	int count = 0;

	for(int i = 0; i < len; i++) {
		if (w1[i] != w2[i]) {
			count++;
		}
	}

	return count;
}

int getpage(char *word)
{
	for(int i = 0; i < nwords; i++) {
		if (!strcmp(word, dic[i])) return i;
	}

	return -1;
}

int find(char *word, char *target, int len)
{
	int src_idx = getpage(word);

	if (src_idx == -1) return 0;

	elem[src_idx] = src_idx+1;

	while(1)
	{
		int find_newelem = 0;

		for(int i = 0; i < nwords; i++) 
		{
			if (elem[i])
			{
				for(int j = 0; j < nwords; j++)
				{
					if (elem[j] == 0 && distance(dic[i], dic[j], len) == 1)
					{
						// add new element.
						elem[j] = i+1;

						if (!strcmp(dic[j], target)) return j;

						find_newelem = 1;
					}
				}
			}
		}

		if (find_newelem == 0) break;
	}

	return 0;
}

int main(int argc, char *argv[])
{
	if (argc != 2) {
		printf("Usage: %s dictionary\n", argv[0]);
		exit(1);
	}

	// make dictionary
	if (makedic(argv[1]) == 0) {
		printf("file open fail.\n");
		exit(1);
	}

	// get input
	char src[MAX_WORD_LEN], target[MAX_WORD_LEN];

	scanf("%s %s", src, target);

	// running...
	int rtn = find(src, target, strlen(src));

	if (rtn == 0) {
		printf("IMPOSSIBLE\n");
	} else {
		// make trace
		int idx = rtn, ntrace = 0;
		int trace[MAX_WORD_NUM];

		while(1)
		{
			trace[ntrace++] = idx;
			if (!strcmp(dic[idx], src)) break;
			idx = elem[idx]-1;
		}

		// print trace
		printf("%s", dic[trace[ntrace-1]]);

		for(int i = ntrace-2; i >= 0; i--) {
			printf(" -> %s", dic[trace[i]]);
		}
		printf("\n");
	}

	return 0;
}

trace를 위해서 elem이라는 배열에 어떤 단어로부터 왔는지 해당 index를 저장해두었다. (trace가 더 빡세...)

사전 파일을 보니 7천줄이 안되는 것같아 일단 메모리에 넣어두고 처리하기로 했다.

다음은 시험결과


shell> ./newdic word4.in

damp like

damp -> gamp -> gimp -> limp -> lime -> like


shell> ./newdic word4.in

acne mind

acne -> acre -> agre -> egre -> eire -> mire -> mine -> mind


shell> ./newdic word5.in

worse tasty

worse -> corse -> carse -> carte -> caste -> haste -> hasty -> tasty


shell> ./newdic word5.in

limit zorna

IMPOSSIBLE


damp like 입력에 대한 답이 예시 답안보다 길어서 맘에 안들긴 하지만 정답이긴 하니 뭐.


이제 심화 문제를 좀 더 고민해봐야지 -_-a


################################################################################################


심화문제 1(가장 적은 단어 사용하기) 해결~! 각 단어마다 distance를 저장해둘 필요가 있다. 


코드는 다음과 같이..

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_WORD_NUM	8192
#define MAX_WORD_LEN	6

int nwords;
int dist[MAX_WORD_NUM];
int from[MAX_WORD_NUM];

char dic[MAX_WORD_NUM][MAX_WORD_LEN];

int makedic(char *fname)
{
	FILE *fp = NULL;

	fp = fopen(fname, "r");

	if (!fp) {
		printf("%s open fail.\n", fname);
		return 0;
	}

	int n = 0;

	while(1)
	{
		n = fscanf(fp, "%s", dic[nwords]);
		if (n == EOF) break;
		nwords++;
	}

	fclose(fp);
	return 1;
}

int distance(char *w1, char *w2, int len)
{
	int count = 0;

	for(int i = 0; i < len; i++) {
		if (w1[i] != w2[i]) {
			count++;
		}
	}

	return count;
}

int getpage(char *word)
{
	for(int i = 0; i < nwords; i++) {
		if (!strcmp(word, dic[i])) return i;
	}

	return -1;
}

int find(char *src, char *target, int len)
{
	int src_idx = getpage(src);

	if (src_idx == -1) return 0;

	dist[src_idx] = 1;

	while(1)
	{
		int updated = 0;

		for(int i = 0; i < nwords; i++)
		{
			if (dist[i])
			{
				for(int j = 0; j < nwords; j++)
				{
					if (distance(dic[i], dic[j], len) == 1) 
					{
						// update distance
						if (dist[j] == 0 || dist[j] > dist[i]+1) 
						{
							dist[j] = dist[i]+1;
							from[j] = i;
							updated = 1;
						}
					}
				}
			}
		}

		if (updated == 0) break;
	}

	int target_idx = getpage(target);
	
	if (dist[target_idx]) {
		return target_idx;
	}

	return 0;
}

int main(int argc, char *argv[])
{
	if (argc != 2) {
		printf("Usage: %s dictionary\n", argv[0]);
		exit(1);
	}

	// make dictionary
	if (makedic(argv[1]) == 0) {
		printf("file open fail.\n");
		exit(1);
	}

	// get input
	char src[MAX_WORD_LEN], target[MAX_WORD_LEN];

	scanf("%s %s", src, target);

	// running...
	int rtn = find(src, target, strlen(src));

	if (rtn == 0) {
		printf("IMPOSSIBLE\n");
	} else {
		// make trace
		int idx = rtn, ntrace = 0;
		int trace[MAX_WORD_NUM];

		while(1)
		{
			trace[ntrace++] = idx;
			if (!strcmp(dic[idx], src)) break;
			idx = from[idx];
		}

		// print trace
		printf("%s", dic[trace[ntrace-1]]);

		for(int i = ntrace-2; i >= 0; i--) {
			printf(" -> %s", dic[trace[i]]);
		}
		printf("\n");
	}

	return 0;
}

다음은 시험결과


shell> ./newdic word4.in

damp like

damp -> lamp -> limp -> lime -> like


shell> ./newdic word4.in

acne mind

acne -> aune -> dune -> dine -> mine -> mind


shell> ./newdic word5.in

worse tasty

worse -> torse -> tarse -> tasse -> taste -> tasty


역시 결과가 달라졌다 음하핫. 시간은 좀 더 걸리지만..



Posted by DevMoon
,